2017-06-02 45 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; 
    } 

    ... 
} 

全球都是邪惡!!!