Intereting Posts
Как прочитать заголовок любого запроса в PHP Предупреждение: mysql_fetch_assoc () ожидает, что параметр 1 будет ресурсом, объект указан Как конструктор дочернего класса взаимодействует с конструктором родительского класса в php? Разница между php echo и return в терминах jQuery ajax call Как обновлять / вставлять случайные даты в SQL в пределах заданного диапазона дат Как я могу предотвратить добавление дополнительных строк после URL-адресов, которые заканчиваются на .php? PHP заменяет все символы звездочкой Переводы с DB в ZF2 Класс «SEOstats \ SEOstats» не найден при вызове экземпляров SEOStats в laravel 5.3 curl: невозможно получить rss с веб-сайта из-за CloudFlare Как использовать PDO для получения массива результатов в PHP? Как интегрировать сервер Asterisk с внешней реляционной базой данных, например mysql? Ошибка 502 в nginx + php5-fpm PHP Может ли клиент когда-либо устанавливать переменные $ _SESSION? Возврат данных обратно диспетчеру из наблюдателя событий в Magento

Доступ к глобальной переменной изнутри класса

У меня есть следующий (снятый) код:

<?PHP class A { function Show(){ echo "ciao"; } } $a = new A(); $b = new B(); class B { function __construct() { $a->Show(); } } ?> 

С некоторым удивлением я не могу получить доступ к глобально определенной переменной $ a из класса, и я получаю исключение неопределенной переменной . Любая помощь?

Почему сюрприз? Это довольно логическая проблема с переменной областью …

Я предлагаю вам использовать global ключевое слово или переменную $GLOBALS для доступа к вашей переменной.

EDIT: Итак, в вашем случае это будет:

 global $a; $a->Show(); 

или

 $GLOBALS['a']->Show(); 

EDIT 2: И, поскольку Vinko прав, я предлагаю вам взглянуть на руководство PHP по области переменных .

пожалуйста, не используйте глобальный метод, который предлагается. У меня боль в животе.

Передайте $ a в конструктор B.

 class A { function Show(){ echo "ciao"; } } $a = new A(); $b = new B( $a ); class B { function __construct( $a ) { $a->Show(); } } 

Вам нужно будет определить его как global переменную внутри области функции, в которой вы хотите ее использовать.

 function __construct() { global $a; $a->Show(); } 
 <?php class A { public function Show(){ return "ciao"; } } class B { function __construct() { $a = new A(); echo $a->Show(); } } $b = new B(); ?>