@yuppyweb

Как настроить область видимости переменных в PHP?

class Test
	{
		
		public $public = 'public';
		
		protected $protected = 'protected';
		
		private $private = 'private';
		
		
		public function __construct()
		{
			call_user_func(function()
			{
				var_dump($this);
			});
		}
		
	}
	
	new Test();


На сервере modApache, PHP 5.3, при выполнении скрипта ошибка:
Notice: Undefined variable: this in /test_this.php on line 18 NULL
На мой взгляд так и должно быть...

Но при смене на FastCGI, PHP 7.0, ошибка пропадает и $this становится доступным внутри функции:
object(Test)#1 (3) { ["public"]=> string(6) "public" ["protected":protected]=> string(9) "protected" ["private":"Test":private]=> string(7) "private" }

Как можно настроить область видимости переменных в php.ini или может в другом месте?
  • Вопрос задан
  • 230 просмотров
Решения вопроса 1
@yuppyweb Автор вопроса
Решение:

call_user_func(static function()
       {
		var_dump($this);
	});
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
SerafimArts
@SerafimArts
Senior Notepad Reader
PHP 5.3

PHP 7.0


Ничего не смущает?

На всякий случай напоминаю, что область видимости в анонимках появилась в 5.4 лет 10+ назад.
Ответ написан
@Snewer
php.net/manual/ru/migration54.new-features.php
Классы для создания анонимных функций (Closures) теперь поддерживают $this.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы