2017-03-07 54 views
1

我在PHP中使用OOP開始,我有一個全局變量的問題。從其他文檔訪問全局變量

我的當前結構的實施例:

test.php REQUIRES globals.php並且還包括classes.php


globals.php有這樣的代碼:

global $something; 
$something = "my text"; 

classes.php看起來是這樣的:

global $something; 

class myClass { 
    public $abc = "123"; 
    public $something; 

    public function doSomething() { 
     echo $this->abc."<br>"; 
     echo $this->something; 
    } 
} 

$class = new myClass(); 
$class_Function = $class->doSomething(); 

print_r($class_Function); 

最後,test.php只顯示 「123」。

我試過用「include()」代替globals.php的「require」,但沒有奏效。在classes.php中也沒有包括globals.php

+0

'$ this-> something!= $ something' –

+0

@ u-mulder爲什麼不呢? –

+0

因爲'$ this-> something'是類的一個屬性,'$ something'只是一個變量。 –

回答

3

$this->something從未初始化。全球$something完全超出範圍,並且與班級屬性$this->something無關。如果您需要訪問一個全局函數或方法裏,你需要將其申報爲世界:

public function doSomething() { 
     global $something; 
     echo $this->abc."<br>"; 
     echo $something; 
    } 

但是你需要停止使用全局變量,因爲沒有一個很好的解決方案。如果你需要做的定義是全局性的系統它者優先使用定義()

define("SOMETHING","My text") 

一些常量的值,然後你可以在你的代碼的任何部分訪問:

echo SOMETHING; 

另請參閱:PHP global variable scope inside a class and Use external variable inside PHP class

+0

感謝您的回覆。我怎樣才能訪問課堂中的'SOMETHING'? 'public SOMETHING;'拋出這個錯誤:'解析錯誤:語法錯誤,意外'SOMETHING'(T_STRING),期望變量(T_VARIABLE)' –

+0

對於定義,你不需要在函數內聲明。 –

+0

我使用'public $ something = SOMETHING;' –