Como sabemos, é fácil criar objetos anônimos em JavaScript, como no código abaixo:
var object = {
p : "value",
p1 : [ "john", "johnny" ]
};
alert(object.p1[1]);
Resultado:
an alert is raised with value "johnny"
Essa mesma técnica pode ser aplicada em PHP? Podemos criar objetos anônimos em PHP?
Respostas:
Já faz alguns anos, mas acho que preciso manter as informações atualizadas!
Desde o PHP 7, é possível criar classes anônimas, para que você possa fazer coisas assim:
Você pode ler mais sobre isso no manual
Mas eu não sei o quão semelhante ele é implementado em JavaScript, portanto, pode haver algumas diferenças entre classes anônimas em JavaScript e PHP.
fonte
"Anônimo" não é a terminologia correta quando se fala de objetos. Seria melhor dizer "objeto do tipo anônimo ", mas isso não se aplica ao PHP.
Todos os objetos no PHP têm uma classe. A classe "padrão" é
stdClass
e você pode criar objetos dessa maneira:Você também pode tirar vantagem de converter uma matriz em um objeto para obter uma sintaxe mais conveniente:
No entanto, esteja ciente de que a conversão de uma matriz para um objeto provavelmente produzirá resultados "interessantes" para aquelas chaves de matriz que não são nomes de variáveis PHP válidos - por exemplo, aqui está uma resposta minha que mostra o que acontece quando as chaves começam com dígitos.
fonte
Sim, é possível! Usando este simples classe PHP Anonymous Object . Como funciona:
É claro que esse objeto é uma instância da
AnObj
classe, portanto não é realmente anônimo, mas possibilita definir métodos rapidamente, como o JavaScript.fonte
Até recentemente, foi assim que criei objetos em tempo real.
Então:
Mas agora eu vou com:
Então, como antes:
Obviamente, se você já conhece as propriedades e os valores, pode configurá-los como foi mencionado:
NB: Eu não sei em quais versões do PHP isso funciona, então você precisa estar atento a isso. Mas acho que a primeira abordagem (que também é curta se não houver propriedades para definir em construção) deve funcionar para todas as versões que possuem json_encode / json_decode
fonte
Converta a matriz em objeto (mas isso não é recursivo para sub-filhos):
fonte
Se você deseja imitar o JavaScript, pode criar uma classe
Object
e, assim, obter o mesmo comportamento. Claro que isso não é mais completamente anônimo, mas funcionará.Isso produzirá o elemento 2 . Isso foi roubado de um comentário no PHP: Classes and Objects .
fonte
O suporte para classes anônimas está disponível desde o PHP 7.0 e é o análogo mais próximo do exemplo de JavaScript fornecido na pergunta.
A declaração de visibilidade nas propriedades não pode ser omitida (usei apenas
var
porque é menor quepublic
.)Como o JavaScript, você também pode definir métodos para a classe:
fonte
Na documentação do PHP, mais alguns exemplos:
$ obj1 e $ obj3 são do mesmo tipo, mas $ obj1! == $ obj3. Além disso, todos os três json_encode () em um objeto JS simples {}:
Saídas:
https://www.php.net/manual/en/language.types.object.php
fonte
Se você deseja criar um objeto (como em javascript) com propriedades dinâmicas, sem receber um aviso de propriedade indefinida, quando não tiver definido um valor para property
fonte
Não - porque o javascript usa protótipos / declaração direta de objetos - no PHP (e em muitas outras linguagens OO), um objeto só pode ser criado a partir de uma classe.
Então a pergunta se torna - você pode criar uma classe anônima.
Novamente, a resposta é não - como você instanciaria a classe sem poder fazer referência a ela?
fonte
Object var = new Object() { ... };
- C ++:class { ... } var;
Para quem quer um objeto recursivo:
fonte
Anoynmus objeto wiki
fonte