Pergunta

Por favor, definir o que stdClass é.

Foi útil?

Solução

stdClass é classe vazia genérico do PHP, como forma de Object em Java ou object em Python ( Editar: , mas não efectivamente utilizado como classe base universal; graças @Ciaran para apontar isto ).

É útil para objetos anônimos, propriedades dinâmicas, etc.

Uma maneira fácil de considerar o StdClass é como uma alternativa à matriz associativa. 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

propriedades dinâmicas em PHP e StdClass para mais exemplos.

Outras dicas

stdClass é apenas um 'vazio' classe genérica que é usado quando lançar outros tipos de objetos. Apesar do que as outras duas respostas dizer, stdClass é não a classe base para objetos em PHP. Isso pode ser demonstrado com bastante facilidade:

class Foo{}
$foo = new Foo();
echo ($foo instanceof stdClass)?'Y':'N';
// outputs 'N'

Eu não acredito que há um conceito de um objeto base em PHP

stdClass é uma outra grande característica PHP. Você pode criar uma classe anônima PHP. Vamos verificar um exemplo.

$page=new stdClass();
$page->name='Home';
$page->status=1;

Agora, acho que você tem uma outra classe que irá inicializar com um objeto da página e executar de base nele.

<?php
class PageShow {

    public $currentpage;

    public function __construct($pageobj)
    {
        $this->currentpage = $pageobj;
    }

    public function show()
    {
        echo $this->currentpage->name;
        $state = ($this->currentpage->status == 1) ? 'Active' : 'Inactive';
        echo 'This is ' . $state . ' page';
    }
}

Agora você tem que criar um novo objeto PageShow com um objeto Page.

Aqui há necessidade de escrever um novo modelo de classe para isso você pode simplesmente usar stdClass para criar uma classe na mosca.

    $pageview=new PageShow($page);
    $pageview->show();

Também digno de nota, um objeto stdClass pode ser criado a partir do uso de json_decode() também.

Usando stdClass você pode criar um novo objeto com a sua próprias propriedades. Considere o exemplo a seguir, que representa os pormenores de um utilizador como uma matriz associativa.

$array_user = array();
$array_user["name"] = "smith john";
$array_user["username"] = "smith";
$array_user["id"] = "1002";
$array_user["email"] = "smith@nomail.com";

Se você precisa para representar os mesmos detalhes que as propriedades de um objeto, você pode usar stdClass como abaixo.

$obj_user = new stdClass;
$obj_user->name = "smith john";
$obj_user->username = "smith";
$obj_user->id = "1002";
$obj_user->email = "smith@nomail.com";

Se você é um desenvolvedor Joomla referem este exemplo nos docs Joomla para uma maior compreensão.

Da mesma forma,

$myNewObj->setNewVar = 'newVal'; 

produz um objeto stdClass - auto Casted

Eu descobri isso hoje por erro ortográfico:

$GLOBASLS['myObj']->myPropertyObj->myProperty = 'myVal';

Cool!

stdClass não é uma classe anônima ou objeto anônimo

As respostas aqui inclui expressões que stdClass é uma classe anônima ou mesmo objeto anônimo. Não é uma verdade.

stdClass é apenas uma classe predefinida regular. Você pode verificar isso usando o operador instanceof ou função get_class. Nada de especial vai aqui. PHP usa essa classe quando casting outros valores a objeto.

Em muitos casos onde stdClass é usada pelos programadores a matriz é melhor opção, porque de funções úteis e o fato de que este usecase representa a estrutura de dados e não um objeto real.

Na verdade, eu tentei criar vazio stdClass e comparou a velocidade para classe vazia.

class emp{}

então passou a criar 1000 stdClasses e EMPs ... aulas vazias foram feitas em torno de 1100 microssegundos enquanto stdClasses levou mais de 1700 microssegundos. Então eu acho que é melhor para criar sua própria classe fictício para armazenar dados se você quiser usar objetos para que tão mal (matrizes são muito mais rápido tanto para escrita e leitura).

stdClass objetos em uso

O stdClass permite criar classes anônimas e com objeto projetando você pode também teclas de acesso de uma matriz associativa em grande estilo OOP. Assim como você acessar a propriedade do objeto regular.

Exemplo

class Example {

  private $options;

  public function __construct(Array $setup)
  {
    // casting Array to stdClass object
    $this->options = (object) $setup;

    // access stdClass object in oop style - here transform data in OOP style using some custom method or something...
    echo $this->options->{'name'}; // ->{'key'}
    echo $this->options->surname;  // ->key
  }

}

$ob1 = new Example(["name" => "John", "surname" => "Doe"]);

ecoará

John Doe

É também importante notar que, usando Fundição você realmente não precisa criar um objeto como na resposta dada pelo @Bandula. Em vez disso você pode simplesmente lançar sua matriz para um objeto eo stdClass é retornado. Por exemplo:

$array = array(
    'Property1'=>'hello',
    'Property2'=>'world',
    'Property3'=>'again',
);

$obj = (object) $array;
echo $obj->Property3;

Output: again

Se você quisesse criar rapidamente um novo objeto para manter alguns dados sobre um livro. Você faria algo assim:

$book = new stdClass;
$book->title = "Harry Potter and the Prisoner of Azkaban";
$book->author = "J. K. Rowling";
$book->publisher = "Arthur A. Levine Books";
$book->amazon_link = "http://www.amazon.com/dp/0439136369/";

Por favor, verifique o site - http://www.webmaster-source.com/2009/08/20/php-stdclass-storing-data-object-instead-array/ para mais detalhes.

Por favor, tenha em mente que 2 stdClasses vazias não são estritamente iguais. Isto é muito importante quando se escreve expectativas zombaria.

php > $a = new stdClass();
php > $b = new stdClass();
php > var_dump($a === $b);
bool(false)
php > var_dump($a == $b);
bool(true)
php > var_dump($a);
object(stdClass)#1 (0) {
}
php > var_dump($b);
object(stdClass)#2 (0) {
}
php >

php.net manual tem uma explicação sólida poucos e exemplos contribuído por usuários de que stdClass é, eu especialmente como este http://php.net/manual/en/language.oop5.basic.php#92123 , https://stackoverflow.com/a/1434375/2352773 .

stdClass é o objeto padrão PHP. stdClass não tem propriedades, métodos ou pai. Ele não suporta métodos mágicos e implementos sem interfaces.

Quando você lança um escalar ou matriz como objeto, você recebe uma instância de stdClass. Você pode usar stdClass sempre que precisar de um objeto genérico exemplo.

stdClass não é uma classe base! classes PHP não herdam automaticamente de qualquer classe. Todas as aulas são autônomos, a menos que explicitamente estender outra classe. difere PHP de muitas linguagens orientadas a objeto a este respeito.

Você pode definir uma classe que estende stdClass, mas você não iria ficar benefício, como stdClass não faz nada.

é uma maneira em que o < a class = "post-tag" href = "/ perguntas / marcado / php" title = "Mostrar perguntas marcado 'php'" rel = "tag"> php evitar parar interpretar o script quando há alguma obrigação de dados ser colocado em uma classe, mas Infelizmente esta classe não foi definida

Exemplo:

 return $statement->fetchAll(PDO::FETCH_CLASS  , 'Tasks');

Aqui os dados serão colocados no 'tarefas' predefinidos. Mas, se nós fizemos o código como este:

 return $statement->fetchAll(PDO::FETCH_CLASS );

vai colocar os resultados em .

diz que: Olha, nós ter um bom miúdos [objetos] aqui, mas sem os pais. Então, vamos enviá-los a uma criança infantil Home Care :)

Você também pode usar object para matrizes elenco a um objeto de sua escolha:

Class Example
{
   public $name;
   public $age;
}

Agora, para criar um objeto do tipo Example e para inicializar que você pode fazer qualquer um destes:

$example = new Example();
$example->name = "some name";
$example->age = 22;

ou

$example = new Example();
$example = (object) ['name' => "some name", 'age' => 22];

O segundo método é principalmente útil para inicializar objectos com muitas propriedades.

stClass é uma classe vazia criada pela própria php, e deve ser usado somente pelo php, porque não é apenas uma classe de "vazio", php usa stdClass para matrizes de converter-se ao estilo de objeto Se você precisa usar stdClass, eu recomendo duas melhores opções: 1- usar matrizes (muito mais rapidamente do que as classes) 2 fazer sua própria classe vazia e usá-lo

//example 1
$data=array('k1'=>'v1' , 'k2'=>'v2',....);

//example 2
//creating an empty class is faster than instances an stdClass
class data={}
$data=new data();
$data->k1='v1';
$data->k2='v2';

o que faz alguém pensar sobre usando o estilo de objeto em vez de estilo gama ???

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top