2012-08-01 8 views
5
<?php 
// $smith = ""; 
    $submit ="button_a"; 

    if($submit == "button_a") { 
     $smith = "button_a"; 
    } 
    elseif($submit == "button_b"){ 
     $smith = "button_b"; 
    } 
?> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
</head> 
<body> 

<p> 
    <?php echo($smith); ?> 
</p> 

</body> 
</html> 

PHPSTORM proporciona un indicador para cada archivo: Rojo - Errores, Amarillo - Advertencia, Verde - OK.advertencia phpstorm variable php podría no haberse definido

El PHP sobre el encabezado asignará un valor a $ smith. En el cuerpo, recibo una advertencia sobre $ smith diciendo que podría estar indefinido. Si declaro toda la variable en la parte superior del código PHP, ($ smith = "";) está contento (sin advertencia).

¿Hay algo que deba hacer para evitar estas advertencias?

No me gusta la idea de adjuntar el comentario a cada uno diciendo que no lo verifique y no quiero apagarlo.

Esto sucede mucho cuando incluyo mi archivo db_login.php que define cuatro o cinco variables. Tengo diferentes archivos db_login.php para WAMP, MAMP y la manguera real.

¿Alguna idea?

+2

Sin duda, recomiendo aunque siempre declarando/inicializar una variable antes de cualquier uso ... hace que la depuración mucho más fácil. – Brian

+0

... y no usar variables globales para la configuración (por ejemplo, detalles de DB etc., clase estática para obtener ayuda) - si es su propio código, por supuesto :) – LazyOne

Respuesta

6

Sí, hay dos cosas que puede hacer para deshacerse de esta advertencia. Lo que ha dicho:

$smith = ""; 
if($submit == "button_a") { 
    $smith = "button_a"; 
} 
elseif($submit == "button_b"){ 
    $smith = "button_b"; 
} 

O comprobar si está configurado cuando lo imprima:

<?php 
    if(isset($smith)) { 
     echo($smith); 
    } 
?> 

Sin embargo, esto es sólo una advertencia, y que le permite saber que hay una condición que $smith won no se definirá (cuando $submit no es "button_a" y no es "button_b"). Si se produjera esa condición, imprimiría $smith cuando no estuviera configurada, lo que podría ser un error en su secuencia de comandos.

+1

PHPSTORM es más inteligente de lo que pensaba. Si cambio elseif a else para que todas las rutas a través del código asignen un valor, es feliz. ¿Qué pasa con mi archivo db_login que define la base de datos, el usuario, la contraseña, la tabla, etc.? ¿Hay alguna manera de "mirar" el archivo de inclusión para no tener que predefinirlos todos? – mkstlwtz

+0

Porque entonces no existen condiciones en las que '$ smith' no esté definido. En realidad es útil (IMO), ya que te dice que existe una condición en la que estarías accediendo a una variable que no se ha definido. Solo obtendría esta información de PHP si ejecutó el script con las condiciones de "error" (es decir, donde '$ submit' no es' button_a' o 'button_b'). Para sus problemas de archivos de inclusión, consulte la respuesta de Dreen a continuación. – nickb

14

Puede indicarle a PHPStorm que ignore los informes de variables no definidas si requieren que la instrucción include se encuentre en el mismo flujo de ejecución antes del acceso variable. Lo encontrará en 'Variable no definida' - Ignore las sentencias 'include' y 'require'. Está habilitado por defecto, por lo que debe deshabilitarlo.

enter image description here

Nota: El ajuste está en File > Settings (Ctrl+Alt+S) > Project Settings > Inspections > PHP > Undefined > Undefined variable

+0

Eso es perfecto. Gracias. – mkstlwtz

+3

¿Dónde están estas configuraciones? – bafromca

+1

Archivo> Configuración (Ctrl + Alt + S)> Configuración del proyecto> Inspecciones> PHP> Indefinido> Variable indefinida – Kobra

Cuestiones relacionadas