Entendo que o PHP não tem uma variável de objeto puro, mas quero verificar se uma propriedade está no objeto ou na classe em questão.
$ob = (object) array('a' => 1, 'b' => 12);
ou
$ob = new stdClass;
$ob->a = 1;
$ob->b = 2;
Em JS, eu posso escrever isso para verificar se a variável a
existe em um objeto:
if ('a' in ob)
Em PHP, algo assim pode ser feito?
Muito obrigado pelo seu conselho.
Respostas:
property_exists (classe $ mista, string $ propriedade)
isset (misto $ var [, misto $ ...])
Exemplo 1:
Exemplo 2:
fonte
empty()
existe uma solução melhor?!empty($var)
?Para verificar se a propriedade existe e se é nulo também, você pode usar a função
property_exists()
.Documentos: http://php.net/manual/en/function.property-exists.php
Ao contrário de isset (), property_exists () retorna TRUE mesmo se a propriedade tiver o valor NULL.
Exemplo:
fonte
Nem isset nem property_exists funcionam para mim.
Acabei indo com:
Exemplo:
fonte
Solução
echo $person->middleName ?? 'Person does not have a middle name';
Mostrar como isso ficaria em uma declaração if para obter mais clareza sobre como isso está funcionando.
Explicação
A maneira tradicional do PHP de verificar a existência de algo é:
OU para uma maneira mais específica de classe:
Ambos são bons em declarações de formato longo, mas em declarações ternárias tornam-se desnecessariamente pesados da seguinte maneira:
isset($person->middleName) ? echo $person->middleName : echo 'Person does not have a middle name';
Você também pode conseguir isso apenas com o operador ternário da seguinte forma:
echo $person->middleName ?: 'Person does not have a middle name';
Mas ... se o valor não existe (não está definido), ele gera uma
E_NOTICE
e não é uma prática recomendada. Se o valor fornull
, não gerará a exceção.Portanto, operador ternário para o resgate, fazendo desta uma pequena resposta pura:
echo $person->middleName ?? 'Person does not have a middle name';
fonte
Se você deseja saber se existe uma propriedade em uma instância de uma classe que você definiu, basta combinar
property_exists()
comisset()
.fonte
property_exists($this, $property)
é meio redundante aqui, pois seu código sempre terá o mesmo resultado queisset($this->$property)
sozinho.isset()
não podemos dizer se uma propriedade é um membro verdadeiro da definição de classe. Vou procurar novamente mais tarde para ter certeza.__get()
mais importantes__isset()
, a saída será diferente em alguns casos.Para verificar se algo sai, você pode usar a função PHP isset (), veja php.net . Esta função irá verificar se a variável está definida e não é NULL.
Exemplo:
Se você precisar verificar se existe uma propriedade em uma classe, poderá usar a construção na função property_exists ()
Exemplo:
fonte
Usar array_key_exists () em objetos é preterido no php 7.4
Em vez disso, isset () ou property_exists () devem ser usados
referência: php.net
fonte
Apenas colocando meus 2 centavos aqui.
Dada a seguinte classe:
o seguinte acontecerá:
Espero que isso ajude alguém
fonte