2017-06-02 48 views
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(); 
} 
+0

我会重构函数aToXML到类中的私有或受保护的方法而不是嵌套函数。 –

+0

是的,它可能是最好的解决方案 – Ilwan

+0

嵌套函数?!?坏!!!它们实际上并没有嵌套,你真的在​​全局范围内创建一个'inside()'函数,完全独立于类实例....而'global'则表示'global',与实例无关 –

回答

0

请不要。但是,如果你真的需要一个外部值,请尝试这个。

class TheClassThatNeedExternalValue 
{ 
    private $externalValue = null; 

    public function injectExternalValue($externalValue) 
    { 
     $this->externalValue = $externalValue; 
    } 

    ... 
} 

全球都是邪恶!!!