Como obtenho uma propriedade em um PHP com base em uma string? Eu ligo magic
. Então o que é magic
?
$obj->Name = 'something';
$get = $obj->Name;
Seria como...
magic($obj, 'Name', 'something');
$get = magic($obj, 'Name');
php
string
oop
properties
Daniel A. White
fonte
fonte
ArrayAccess
,Countable
e uma das interfaces de iterador, é principalmente indistinguível de um normaisarray()
Se você deseja acessar a propriedade sem criar uma variável intermediária, use a
{}
notação:Isso também permite criar o nome da propriedade em um loop, por exemplo:
fonte
$this->{$property}[$name]
, caso contrário,$this->$property[$name]
irá lançar um erro$this->$property[$name]
tenha sucesso, embora isso provavelmente seja um bug.$name
é convertido silenciosamente em um número inteiro. No caso de uma sequência não numérica, é isso0
. Em seguida, este índice de sequência do valor de$property
é usado como o nome da propriedade. Se$property
mantiver o valor "abc", isso se referirá à propriedade$this->a
(índice 0). Se existir essa propriedade, isso será bem-sucedido.O que você está perguntando é chamado de Variáveis variáveis . Tudo o que você precisa fazer é armazenar sua string em uma variável e acessá-la da seguinte forma:
fonte
Algo assim? Ainda não testei, mas deve funcionar bem.
fonte
Apenas armazene o nome da propriedade em uma variável e use a variável para acessar a propriedade. Como isso:
fonte
Pode haver respostas para esta pergunta, mas você pode querer ver essas migrações para o PHP 7
fonte: php.net
fonte
É simples, $ obj -> {$ obj-> Name}, os colchetes enrolam a propriedade como uma variável variável.
Esta foi uma das principais pesquisas. Mas não resolvi minha pergunta, que estava usando $ this. No caso da minha circunstância, usar o suporte encaracolado também ajudou ...
exemplo com a instância get do Code Igniter
em uma classe de biblioteca de origem chamada algo com uma instância de classe pai
a classe da biblioteca que precisa originar de outra classe também com a instância dos pais
fonte
Apenas como uma adição: dessa forma, você pode acessar propriedades com nomes que, de outra forma, não poderiam ser utilizados
(não que você deva, mas no caso de precisar).Se você quiser fazer coisas ainda mais extravagantes, deve refletir
fonte
Caso alguém mais queira encontrar uma propriedade profunda de profundidade desconhecida, vim com o abaixo, sem precisar percorrer todas as propriedades conhecidas de todas as crianças.
Por exemplo, para encontrar $ Foo-> Bar-> baz, ou $ Foo-> baz, ou $ Foo-> Bar-> Baz-> dave, onde $ path é uma string como 'foo / bar / baz'.
E depois chame com algo como:
fonte
Aqui está a minha tentativa. Possui algumas verificações comuns de 'estupidez', garantindo que você não tente definir ou obter um membro que não esteja disponível.
Você pode mover esses cheques 'property_exists' para __set e __get respectivamente e chamá-los diretamente em magic ().
fonte
O que essa função faz é verificar se a propriedade existe nesta classe de algum filho de seu filho e, se houver, obtém o valor, caso contrário, retorna nulo. Portanto, agora as propriedades são opcionais e dinâmicas.
Uso:
fonte
why edit: before: using eval (evil) after: nenhum eval. sendo velho neste idioma.
fonte