无法访问函数内部的全局变量

这(我的代码的简化版本)不起作用:

<?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

回到顶部