Когда вы определяете функцию и вызываете ее в это время (если функция была найдена), php создает область действия, которая будет похожа на другой «дом» для всех переменных и функций, которые объявлены / определены внутри нее. По этой причине нам иногда нужно использовать ключевое слово global
, когда мы хотим сослаться на $var1
, которое определено вне функции (и класса, если таковые имеются), и у нас есть переменная с тем же именем, объявленным в нашей функции
CASE 1:
function A($args1)
{
//---- scope of A starts here
function B($args2)
{ return 'hello from B'; }
B(); // call B
//---- scope of A ends here
}
CASE 2:
function A($args1)
{
//---- scope of A starts here
A(); // call A
//but where is A?
//---- scope of A ends here
}
В 1-м случае блок функции A (что-либо между {}) является автономным блоком, то есть имеет все что любой код внутри него потребуется для запуска. Поэтому, когда встречается B()
, php смотрит в область действия A
, определена ли какая-либо функция с именем B
? Да!
Во 2-м случае PHP делает то же самое, когда встречает A()
, но, не найдя его там, он смотрит в глобальную область ie. весь код, который находится за пределами вашего класса, чтобы найти функцию с именем A
. Так как ее нет, она выдает исключение
. Когда вы используете $this->A()
php, знает, где искать эту функцию ie. Внутри того же объекта, откуда она была вызвана, и она запускается. совершенно