Посмотрите, что возвышается global
ключевое слово здесь:
function aaa($b) {
$a = 30; # local variable, will be overwritten just in the next line
global $a, $c; # importing $a from the global scope - NULL
return $c = ($b + $a); # $c = (40 + NULL)
}
Руководство по адресу http://php.net/global напоминает, что глобальная переменная влияет на функцию, если она используется внутри нее. Это не только для первого вызова, но и для всех последующих вызовов.
Это делает функцию недетерминированной, поэтому менее полезный код, и вы можете - как вы это делали, - раздражать его.
Простой выход есть: Вместо того, чтобы параметрические значения этой функции в глобальных переменных, превратить их в параметры:
function aaa($a, $b, &$c) {
return $c = ($b + $a);
}
echo aaa(30, 40, $c); //Output is 70
код не только намного легче читать, но и детерминированной. При вызове он всегда будет вести себя одинаково. Это означает меньше угадывания.
Этот пример до сих пор проблему возвращения значения по параметру (по ссылке), однако вы можете видеть, как хорошо, что это на самом деле не нужно больше:
function aaa($a, $b) {
return ($b + $a);
}
echo $c = aaa(30, 40); //Output is 70
Уроки отнимать:
- Не используйте глобальные переменные внутри функций - они стоят на вашем пути.
- Уменьшите количество параметров, которые имеет функция (это около все значения, соответствующие глобальным значениям).
Это потому, что [глобальные переменные никогда не правильный ответ] (http://stackoverflow.com/questions/5166087/php-global-in-functions/5166527 # 5166527) – Gordon
$ global больше не будет работать в PHP 5.4+ - бог благодарности, sh .. ушел. :-) – herrjeh42