2013-01-23 76 views
0

我有一個問題如何調用一個變量。來自functon的外部函數的PHP調用變量

在JS,如果我寫$A = $this->AB()裏面,我可以通過$AC()內達到$this->A;但在PHP看來,這樣的方式將無法正常工作。

請指教一種可以讀取$ this-A內部C()而不給函數變量的方法。

class X { 

    function B(){ 
     function C(){ 
      $this->A; // Can not call A here 
      $A; // No work either 

     } 
     $A = $this->A; // 

     $this->A; // Can call A here 
    } 

    private $A; 
} 

這裏這一個是Global $A Get variables from the outside, inside a function in PHP

然而,如果全球,全球在這裏的意思不是類內的整個腳本。

非常感謝您的建議。

回答

2

你不能在函數中定義函數,避免它,它是不好的!該功能不會被限制在範圍內。函數總是全局的。

雖然它可以在第一次運行時工作,但這樣的代碼的執行只會定義該函數(它在以前不會被調用),並且在下一次調用時會因「重新定義的函數錯誤」而崩潰。

瞭解了這一點,你的代碼所做的是定義一個實際上在類之外的全局函數「C」,因此不能訪問私有屬性。

+0

我我實際上對函數C()使用了if(!function_exists(''))。那會工作嗎? – Till

+0

沒關係。函數總是全局的。執行你的代碼是沒有意義的。你想達到什麼目的?將C函數像B函數一樣放入類中,可能使其成爲禁止從類外部訪問的私有函數。 – Sven

+0

我看到了,我不明白,你在這裏的意思是全球性的...我認爲所有在班級範圍內的課內陳述的功能... – Till

1

正如埃裏克森說,在函數內部功能不好但是忽略了,你也可以做到這一點,露出非功能範圍瓦爾在函數中

class X { 

    function B(){ 
     $A = $this->A; // 
     function C(){ 
      global $A; // No work either 
     } 
     $this->A; // Can call A here 
    } 

    private $A; 
} 

編輯從評論:

class X { 

    public $inputvar; 
    public $outputvar; 

    public function B($changeinput) { 
     $this->inputvar = $changeinput; 
    } 

    public function C($secondinput) { 
     $this->outputvar = $this->inputvar." == ".$secondinput; 
    } 

    public function return_var() { 
     return $this->outputvar; 
    } 
} 

$testclass = new X(); 

$testclass->B("test input"); 
$testclass->C("second input"); 
$testclass->inputvar = "BLAAH"; 

echo $testclass->return_var(); 
+0

非常感謝,我可以問C()裏面的全局$ A,這個全局意味着什麼B()內?整個頁面? (假設類 – Till

+0

之外有$ A,則在C中添加全局$ A將允許它訪問任何名爲$ A的變量,該變量被指定爲全局變量。即,C以外的可變變量不是私有變量。因此它應該能夠讀取$ A FROM B()和主類。例如'class X {public $ test; function C(){global $ test;}}' – Dave

+0

非常感謝 – Till