Entiendo que PHP no tiene una variable de objeto puro, pero quiero verificar si una propiedad está en el objeto o clase dada.
$ob = (object) array('a' => 1, 'b' => 12);
o
$ob = new stdClass;
$ob->a = 1;
$ob->b = 2;
En JS, puedo escribir esto para verificar si a
existe una variable en un objeto:
if ('a' in ob)
En PHP, ¿se puede hacer algo así?
Muchas gracias por tu consejo.
Respuestas:
property_exists (clase mixta $, cadena $ propiedad)
isset (mixed $ var [, mixed $ ...])
Ejemplo 1:
Ejemplo 2
fuente
empty()
hay una mejor solución?!empty($var)
?Para verificar si la propiedad existe y si también es nula, puede usar la función
property_exists()
.Documentos: http://php.net/manual/en/function.property-exists.php
A diferencia de isset (), property_exists () devuelve TRUE incluso si la propiedad tiene el valor NULL.
Ejemplo:
fuente
Ni isset ni property_exists funcionan para mí.
Terminé yendo con:
Ejemplo:
fuente
Solución
echo $person->middleName ?? 'Person does not have a middle name';
Para mostrar cómo se vería esto en una declaración if para obtener más claridad sobre cómo funciona esto.
Explicación
La forma tradicional de PHP para verificar la existencia de algo es hacer:
O para una forma más específica de clase:
Ambos están bien en declaraciones de forma larga, pero en declaraciones ternarias se vuelven innecesariamente engorrosas de esta manera:
isset($person->middleName) ? echo $person->middleName : echo 'Person does not have a middle name';
También puede lograr esto solo con el operador ternario así:
echo $person->middleName ?: 'Person does not have a middle name';
Pero ... si el valor no existe (no está establecido), aumentará
E_NOTICE
y no es la mejor práctica. Si el valor es,null
no generará la excepción.Por lo tanto, el operador ternario al rescate hace que esta sea una pequeña y clara respuesta:
echo $person->middleName ?? 'Person does not have a middle name';
fuente
Si desea saber si existe una propiedad en una instancia de una clase que ha definido, simplemente combínela
property_exists()
conisset()
.fuente
property_exists($this, $property)
son algo redundantes aquí, ya que su código siempre tendrá el mismo resultado queisset($this->$property)
solo.isset()
no puede decirle si una propiedad es un miembro verdadero de la definición de clase. Buscaré nuevamente más tarde para asegurarme.__get()
y, lo que es más importante__isset()
, métodos mágicos, el resultado será diferente en algunos casos.Para verificar si algo existe, puede usar la función PHP isset (), consulte php.net . Esta función verificará si la variable está establecida y no es NULL.
Ejemplo:
Si necesita verificar si existe una propiedad en una clase, puede usar la función de compilación property_exists ()
Ejemplo:
fuente
El uso de array_key_exists () en objetos está en desuso en php 7.4
En su lugar, se debe usar isset () o property_exists ()
referencia: php.net
fuente
Solo pongo mis 2 centavos aquí.
Dada la siguiente clase:
ocurrirá lo siguiente:
Espero que esto ayude a cualquiera
fuente