无法访问函数内部的全局变量
这(我的代码的简化版本)不起作用:
<?php $sxml = new SimpleXMLElement('<somexml/>');
function foo(){
$child = $sxml->addChild('child');
}
foo();
?>
为什么?我要访问,$sxml
因为如果foo()
失败,我想在上面记录错误。
foo()
递归地调用自身以创建目录列表,因此我担心将整体传递给$sxml
自身(如中所述foo($sxml)
)可能会损害性能。
有没有一种方法可以$sxml
在$foo
不传递参数的情况下访问内部?(PHP 5.2.x +)
如果代码看起来像这样呢?
<?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);
?>
或将其声明为global:
<?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();
?>
以上是 无法访问函数内部的全局变量 的全部内容, 来源链接: utcz.com/qa/398848.html