Вот код первой:PHP переменная сфера quetion
<?php
$test = 'nothing';
function check_test(){
global $test;
echo 'The test is '.$test.'\n';
}
function run($lala){
$test = $lala;
check_test();
}
check_test();
run('Test 2');
run('Test 3');
check_test();
AFAIK в Python он будет работать, потому что он ищет переменные в верхней области видимости, но выглядит она по разному работает в PHP. Итак, вот вопрос: как я могу достичь такого поведения, поэтому функция будет использовать первую переменную, и не начнет смотреть с более высокого уровня. В этом примере я хотел получить выход.
The test is nothing
The test is Test 2
The test is Test 3
The test is nothing
Но получил только
The test is nothing
4 раза.
Означает, что было использовано только первое объявление переменной. Очень ценю любые предложения!
Это не дубликат, я понимаю концепцию сферы, я спрашиваю, можно ли добиться определенного поведения в этом фрагменте.
UPD: Я не могу использовать предложенные методы, потому что мы используем pthreads, и каждая функция будет работать в одно и то же время, и глобальная переменная будет изменяться каждую секунду, и это не то, что я хочу. Вместо этого мне нужно, чтобы каждый поток использовал свою собственную «локальную» глобальную тестовую переменную.
Фактически вы не изменяете глобальное тестовое значение в своей функции 'run'. Вы меняете значение, которое видимо внутри этой функции. – Thamilan
Возможный дубликат [Ссылка: что такое переменная область, какие переменные доступны из того, где и какие ошибки «неопределенной переменной»?] (Http: // stackoverflow.com/questions/16959576/reference-what-is-variable-scope-which-variables-are-access-from-where-and) – dimlucas
@ Это то, что я хотел. Поэтому каждая функция будет использовать ее ближайшую переменную $ test как глобальную. – user3416803