Это мои настройки:display_startup_errors = ondisplay_errors = Onerror_reporting = E_ALL |E_STRICT
$b;
function func ($name) {
global $b;
$b = 10;
return $b;
}
$a =& func("myname");
++$a ;
echo '<br/>$a= '.$a.' $b= ' .$b."<br/>";
xdebug_debug_zval('a'); echo "<br/> ";
В вышеприведенном коде указано следующее уведомление:
Строгие стандарты: только переменные должны быть назначены по ссылке в /path/to/file/file.php on line 'какой-то номер строки '$ a = 11 $ b = 10a: (refcount = 1, is_ref = 0) = 11
Почему вышеуказанный код отображает уведомление?И почему происходит COW (копирование при записи)?
$b;
function &func ($name) {//change here: to return a reference.
global $b;
$b = 10;
return $b;
}
$a =& func("myname");
++$a ;
echo '<br/>$a= '.$a.' $b= ' .$b."<br/>";
xdebug_debug_zval('a'); echo "<br/> ";
Приведенный выше код выведет:
$ a = 11 $ b = 11a: (refcount = 1, is_ref = 1) = 11
Почему здесь не выдается уведомление о строгих стандартах?И здесь ссылка работает.
$b;
function &func ($name) {
global $b;
$b = 10;
return $b;
}
$a = func("myname"); //change here: removed &
++$a ;
echo '<br/>$a= '.$a.' $b= ' .$b."<br/>";
xdebug_debug_zval('a'); echo "<br/> ";
Вышеприведенный код выведет:
$ a = 11 $ b = 10a: (refcount = 1, is_ref = 0) = 11
Почему здесь происходит COW?
Для получения информации о посещении xdebug_debug_zval здесь .