Por favor, defina o que stdClass
é.
1049
stdClass
é a classe vazia genérica do PHP, como Object
em Java ou object
Python ( Edit: mas na verdade não é usada como classe base universal; obrigado @Ciaran por apontar isso ).
É útil para objetos anônimos, propriedades dinâmicas etc.
Uma maneira fácil de considerar o StdClass é como uma alternativa ao array associativo. Veja este exemplo abaixo que mostra como json_decode()
permite obter uma instância StdClass ou uma matriz associativa. Além disso, mas não mostrado neste exemplo, SoapClient::__soapCall
retorna uma instância StdClass.
<?php
//Example with StdClass
$json = '{ "foo": "bar", "number": 42 }';
$stdInstance = json_decode($json);
echo $stdInstance->foo . PHP_EOL; //"bar"
echo $stdInstance->number . PHP_EOL; //42
//Example with associative array
$array = json_decode($json, true);
echo $array['foo'] . PHP_EOL; //"bar"
echo $array['number'] . PHP_EOL; //42
Veja Propriedades dinâmicas no PHP e StdClass para obter mais exemplos.
{}
construção do JavaScript .function(StdClass $a, array $params)
vs verificar se$a
é objeto einstanceof
.stdClass
é apenas uma classe 'vazia' genérica usada ao converter outros tipos para objetos. Apesar do que as outras duas respostas dizem, nãostdClass
é a classe base para objetos em PHP. Isso pode ser demonstrado facilmente:Não acredito que exista um conceito de objeto base em PHP
fonte
stdClass é outro ótimo recurso PHP. Você pode criar uma classe PHP anônima. Vamos verificar um exemplo.
Agora pense que você tem outra classe que será inicializada com um objeto de página e executada com base nele.
Agora você precisa criar um novo objeto PageShow com um objeto de página.
Aqui não há necessidade de escrever um novo modelo de classe para isso, você pode simplesmente usar stdClass para criar uma classe em tempo real.
fonte
stdClass
.Também digno de nota, um
stdClass
objeto também pode ser criado a partir do usojson_decode()
.fonte
True
. Booleanos são minúsculostrue
oufalse
.Usando stdClass, você pode criar um novo objeto com suas próprias propriedades. Considere o exemplo a seguir que representa os detalhes de um usuário como uma matriz associativa.
Se você precisar representar os mesmos detalhes que as propriedades de um objeto, poderá usar stdClass como abaixo.
Se você é um desenvolvedor do Joomla, consulte este exemplo nos documentos do Joomla para entender melhor.
fonte
Da mesma forma,
gera um objeto stdClass - convertido automaticamente
Descobri isso hoje com erros ortográficos:
Legal!
fonte
stdClass não é uma classe ou objeto anônimo
As respostas aqui incluem expressões que
stdClass
são uma classe anônima ou mesmo objeto anônimo. Não é verdade.stdClass
é apenas uma classe predefinida regular. Você pode verificar isso usando oinstanceof
operador ou a funçãoget_class
. Nada de especial vai aqui. O PHP usa essa classe ao converter outros valores para o objeto.Em muitos casos, onde
stdClass
é usado pelos programadores, a matriz é a melhor opção, devido às funções úteis e ao fato de que este caso de uso representa a estrutura de dados e não um objeto real.fonte
Também é importante notar que, ao usar o Casting, você não precisa criar um objeto, como na resposta dada pelo @Bandula. Em vez disso, você pode simplesmente converter sua matriz em um objeto e o stdClass é retornado. Por exemplo:
Output: again
fonte
Na verdade, tentei criar stdClass vazio e comparei a velocidade com a classe vazia.
Em seguida, prosseguiu a criação de 1000 stdClasses e emps ... as classes vazias foram realizadas em cerca de 1100 microssegundos, enquanto o stdClasses levou mais de 1700 microssegundos. Acho que é melhor criar sua própria classe fictícia para armazenar dados, se você quiser tanto usar objetos para isso (as matrizes são muito mais rápidas para escrever e ler).
fonte
Objetos stdClass em uso
O stdClass permite criar classes anônimas e, com a conversão de objetos, você também pode acessar as chaves de uma matriz associativa no estilo OOP. Assim como você acessaria a propriedade regular do objeto.
Exemplo
ecoará
fonte
Se você deseja criar rapidamente um novo objeto para armazenar alguns dados sobre um livro. Você faria algo assim:
Consulte o site - http://www.webmaster-source.com/2009/08/20/php-stdclass-storing-data-object-instead-array/ para obter mais detalhes.
fonte
Lembre-se de que 2 stdClasses vazias não são estritamente iguais. Isso é muito importante ao escrever expectativas de zombaria.
fonte
O manual do php.net tem algumas explicações e exemplos sólidos, contribuídos pelos usuários sobre o que é stdClass. Eu gosto especialmente deste http://php.net/manual/en/language.oop5.basic.php#92123 , https: // stackoverflow.com/a/1434375/2352773 .
fonte
stdclass é uma maneira pela qual o php evite parar de interpretar o script quando houver alguns dados que devem ser colocados em uma classe, mas infelizmente essa classe não foi definida
Exemplo:
Aqui, os dados serão colocados nas 'Tarefas' predefinidas. Mas, se fizermos o código como este:
então o php colocará os resultados em stdclass .
simplesmente phpdiz o seguinte: olha, nós temos um bom KIDS [Objetos] aqui, mas sem os pais. Então, nós os enviaremos para uma creche infantilstdclass :)
fonte
Você também pode usar
object
para converter matrizes em um objeto de sua escolha:Agora, para criar um objeto do tipo
Example
e inicializá-lo, você pode:OU
O segundo método é mais útil para inicializar objetos com muitas propriedades.
fonte
stClass é uma classe vazia criada pelo próprio php e deve ser usada apenas pelo php, porque não é apenas uma classe "vazia", o php usa stdClass para converter matrizes em estilo de objeto, se você precisar usar o stdClass, recomendo duas opções melhores : 1- use matrizes (muito mais rápido que as classes) 2- crie sua própria classe vazia e use-a
o que faz alguém pensar em usar o estilo de objeto em vez de estilo de matriz ???
fonte
A razão pela qual temos stdClass é porque, no PHP, não há como distinguir uma matriz normal de uma matriz associada (como em Javascript, você tem
{}
um objeto e[]
uma matriz para distingui-los).Portanto, isso cria um problema para objetos vazios. Veja isso por exemplo.
PHP:
Vamos supor que você queira codificar JSON a variável $ c
Agora, digamos que você excluiu todas as chaves,
$b
deixando-as vazias. Como$b
agora está vazio (você excluiu todas as chaves, lembra?), Parece[]
que pode ser um array ou objeto se você olhar para ele.Portanto, se você fizer um json_encode novamente, a saída será diferente
Isso é um problema, porque sabemos
b
que deveria ser uma matriz associada, mas o PHP (ou qualquer função como json_encode) não.Então o stdClass vem para resgatar. Tomando o mesmo exemplo novamente
Portanto, agora, mesmo se você excluir todas as chaves
$b
e torná-las vazias, uma vez que é uma stdClass, isso não importará e quando você o codificar em json, obterá o seguinte:Essa também é a razão pela qual,
json_encode
ejson_decode
por padrão, retorna stdClass.fonte