0
我有一个问题,有一个类属性,我需要在一个方法中的函数内类中。如果是uncleat它看起来有点像:对象上下文中的全局变量
class Foo {
public $var;
public function test() {
function inside() {
//Need $this->var here but getting a "not in object context" error
}
}
}
我也尝试过这种方式,但$变种似乎空
class Foo{
public $var;
public function test() {
$var = $this->var;
function inside() {
global $var;
//but here, $var=null
}
}
}
所以,如果你有任何想法...谢谢 (这是我的代码:)
public function XML($input) {
$dt= ($this->datatype) ? $this->datatype : "row";
function aToXML($data, &$xmlData) {
global $dt;
foreach($data as $key => $value) {
if (is_numeric($key)){
//here
$key = $dt.strval(intval($key)+1);
}
if (is_array($value)) {
$subnode = $xmlData->addChild($key);
aToXML($value, $subnode);
}
else {
$xmlData->addChild("$key",htmlspecialchars("$value"));
}
}
}
if ($this->returnFromArray) {
$xml=simplexml_load_string("<?xml version=\"1.0\" encoding=\"UTF-8\"?><data></data>");
aToXML($input, $xml);
return $xml->asXML();
}
else {
return ($input) ? "<?xml version=\"1.0\" encoding=\"UTF-8\"?><success />" : "<?xml version=\"1.0\" encoding=\"UTF-8\"?><failure />";
}
return $xml->asXML();
}
我会重构函数aToXML到类中的私有或受保护的方法而不是嵌套函数。 –
是的,它可能是最好的解决方案 – Ilwan
嵌套函数?!?坏!!!它们实际上并没有嵌套,你真的在全局范围内创建一个'inside()'函数,完全独立于类实例....而'global'则表示'global',与实例无关 –