La combinación de isset y is_null falla al verificar la propiedad de un objeto indefinido

isset combinar isset e is_null en una función para facilitar su uso

Mi acercamiento:

 class sys { public static function is_null(&$variable) { // if it's not set if (!isset($variable)) { return true; } // if array if (is_array($variable)) { return (boolean) (count($variable) < 1); } // if string return (boolean) (strlen($variable) < 1); } } 

El problema que tengo cuando lo uso dentro de un objeto sigue a la excepción:

ErrorException [Aviso]: la modificación indirecta de la propiedad sobrecargada xxx no tiene ningún efecto.

Para facilidad de uso? El equivalente es return !isset($var) || empty($var); return !isset($var) || empty($var); . es tan dificil?

Lo que necesita isset() al construir una función como esta, es que isset() no es una función. Es una construcción de lenguaje. Entonces no puedes pasar una variable a una función y luego llamar a isset sobre esa variable (bueno, sin generar un aviso al menos).

En segundo lugar, no hay necesidad de convertir a booleano en: return (boolean) (strlen($variable) < 1); . Es exactamente lo mismo que return strlen($variable) < 1; .

Tercero, no hay razón para count() o usar strlen() , ya que eso es exactamente lo que empty() fue diseñado para verificar.

En cuarto lugar, no hay ninguna razón para pasar el argumento por referencia. No cambiará nada, y está creando innecesariamente referencias donde no hay razón para hacerlo. Simplemente tome el argumento como normal (no usará más memoria gracias a copy-on-write).

Con todo, sugeriría no hacer este tipo de función de "ayuda". Solo use !isset($var) || empty($var) !isset($var) || empty($var) si desea verificar si está vacío. Está más claro, tiene más sentido semántico y, francamente, no duplica el esfuerzo. Y si no le importa el aviso, puede simplemente reemplazar la llamada completa con if (empty($variable)) ...

Pero si usa este tipo de función, le sugiero cambiar el nombre. Volverá a ser true incluso si la variable no es null , por lo que llamar a la función is_null es erróneo. Quizás is_empty sería mejor ...

solo use empty()