Это (упрощенная версия моего кода) не работает:
<?php $sxml = new SimpleXMLElement('<somexml/>'); function foo(){ $child = $sxml->addChild('child'); } foo(); ?>
Зачем? Я хочу получить доступ к $sxml
потому что я хочу регистрировать ошибки на нем, если foo()
терпит неудачу. foo()
вызывает себя рекурсивно, чтобы создать список каталогов, поэтому я боюсь, что передача всего $sxml
на себя (как в foo($sxml)
) может повредить производительность.
Есть ли способ доступа к $sxml
внутри $foo
без передачи его в качестве аргумента? (PHP 5.2.x +)
EDIT: Что, если код выглядит так?
<?php bar(){ $sxml = new SimpleXMLElement('<somexml/>'); function foo(){ $child = $sxml->addChild('child'); } foo(); } bar(); ?>
Вы должны передать его функции:
<?php $sxml = new SimpleXMLElement('<somexml/>'); function foo($sxml){ $child = $sxml->addChild('child'); } foo($sxml); ?>
или объявить его глобальным :
<?php $sxml = new SimpleXMLElement('<somexml/>'); function foo(){ global $sxml; $child = $sxml->addChild('child'); } foo(); ?>
Если переменная не является глобальной, но вместо нее определена во внешней функции, первая опция (проходящая как аргумент) работает одинаково:
<?php function bar() { $sxml = new SimpleXMLElement('<somexml/>'); function foo($sxml) { $child = $sxml->addChild('child'); } foo($sxml); } bar(); ?>
Альтернативно, создайте закрытие , объявив переменную в предложении use
.
<?php function bar() { $sxml = new SimpleXMLElement('<somexml/>'); function foo() use(&$xml) { $child = $sxml->addChild('child'); } foo(); } bar(); ?>
Вам нужно явно пригласить глобальную переменную в область функций:
function foo(){ global $sxml; $child = $sxml->addChild('child'); }
Используйте глобальное ключевое слово для объявления $ sxml внутри вашей функции.
<?php $sxml = new SimpleXMLElement('<somexml/>'); function foo(){ global $sxml; $child = $sxml->addChild('child'); } foo(); ?>
если переменная объявлена внутри модуля, и вы пытаетесь получить ее с global $my_var
, вы потерпите неудачу, потому что эта переменная определена в LOCAL SCOPE .
решение заключается в использовании $ GLOBALS, когда вы объявляете эту переменную:
$my_var= 'blabla'; $GLOBALS['my_var'] = 'blabla';