2016-04-20 3 views
-1

Это прекрасно работаетУстановка переменной обнулить путаницы

<?php 
error_reporting(E_ALL); 
$a = null; 
var_dump($a); // outputs no notice and NULL 

пока это производит уведомление?

<?php 
error_reporting(E_ALL); 
$a; 
var_dump($a); // outputs a notice followed by NULL 

и это работает

<?php 
error_reporting(E_ALL); 
class some_class 
{ 
    private $a; 

    public static $b; 

    public function __construct() 
    { 
     echo var_dump($this->a); // outputs NULL 
    } 
} 
var_dump(some_class::$b); // outputs NULL 
new some_class(); 
+0

, что ваш вопрос? '$ a;' не является допустимым назначением. –

+1

Во втором примере вы не установили '$ a' в' null', но это отображение по умолчанию при попытке получить доступ к неопределенному var. – AbraCadaver

+0

@mistermartin Я предполагаю, что я ожидал, что уведомление произойдет при объявлении '$ a; ', а не при попытке получить к нему доступ в' var_dump ($ a); '? – MonkeyZeus

ответ

3

Примечание для будущих читателей.

Этот ответ был основан на исходном сообщении, прежде чем вводить использование класса https://stackoverflow.com/revisions/36752382/1 и не помечен как дополнительное редактирование.


"а затем NULL"

  • Который является нормальным поведение.

В руководстве по переменным основам http://php.net/manual/en/language.variables.basics.php

«Не надо инициализировать переменные в PHP, однако это очень хорошая практика. Неинициализированные переменные имеют значение по умолчанию их типа в зависимости от контекст, в котором они используются - booleans по умолчанию FALSE, целые числа и поплавки по умолчанию равны нулю, строки (например, используемые в echo) устанавливаются как пустая строка, а массивы становятся пустым массивом ».

Пример # 1 Значения по умолчанию неинициализированных переменных

<?php 
// Unset AND unreferenced (no use context) variable; outputs NULL 
var_dump($unset_var); 

// Boolean usage; outputs 'false' (See ternary operators for more on this syntax) 
echo($unset_bool ? "true\n" : "false\n"); 
  • Примечание outputs NULL даже на неопределенной переменной.

"@mistermartin Я предполагаю, что я ожидал бы уведомление произойти при объявлении $ а, скорее, чем при попытке получить к нему доступ в var_dump ($ а) ;? - MonkeyZeus"

Это потому, что вы не пытались получить к нему доступ каким-либо образом, формой или формой.

Просто делать: (будучи действительным заявление, которое я мог бы добавить)

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 
$a; // Awaits further instructions. Won't complain till then. 

не будет бросать уведомление, пока вы не вводить var_dump(); или любые другие действительные функций, которые могут использовать его.

  • Подумайте об этом, поскольку газ на земле находится прямо у ваших ног. Это будет не очень хорошо, пока вы не представите освещенное совпадение (или Zippo).

Другим существом «эхо» без var_dump() будет высылать уведомление, но без NULL.

т.е .:

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 
echo $a; // This will make it complain, as will var_dump($a); in its place. 

метательный:

Примечание: Undefined переменной: а в /path/to/file.php на линии х

Смежные вопросы