2013-01-21 88 views
0

目前我重新湊湊熱鬧一些代碼,我現在已經寫了這樣的事情:如何正確使用的類方法中的全局變量

<?php 
global $foo; 
$foo = "foo"; 

class foo{ 
    function bar(){ 
     global $foo; 
     return $foo."bar"; 
    } 
} 

$class = new foo(); 
echo foo->bar(); 
//returns 'foobar'; 
?> 

這工作,就好了。我的問題是,這是包含變量的正確方法嗎?我的一些類文件有20個以上的全局變量,必須在每種方法中重新定義爲全局變量。

+4

不能變量聲明爲「公共」以外的課程,所以我懷疑它,這個作品「就好了」 :) –

+0

我的意思是全球性的,而不是公衆....對不起,我是個白癡。 –

+1

@HydraIO - 你不是白癡,你是人。那麼......人類是白癡,所以我想你是對的...... –

回答

3

儘可能避免使用全局變量。我不會在這裏重複爲什麼,因爲有很多答案可以解釋爲什麼它被認爲是不好的做法(example)。

相反,通過你需要你的類裏面你的構造,如變量:

class foo{ 

    protected $foo; 

    public function __construct($foo){ 
    $this->foo = $foo; 
    } 

    public function bar(){ 
     return $this->foo . "bar"; 
    } 
} 

$foo = "foo"; 
$class = new foo($foo); 
echo foo->bar(); 
+0

或者只是將它作爲參數傳遞給bar()。這假設你在構建類時有'$ foo'的作用域。 –

+0

出於好奇,使用這種方法可以在擴展'foo'的類中使用'parent :: $ foo'? –

+0

如果他只在'bar()'中需要它,那麼是的,沒有理由將其聲明爲屬性... @Hydra IO:子類將繼承父類的所有公共或受保護的屬性,所以你可以用同樣的方式訪問它,使用'$ this-> foo' –