2011-03-23 143 views
2

使PHP中的類時,就是這兩者之間的區別:PHP的面向對象的類變量VS對象變量

class Search 

    function __construct() 
    { 

     $this->variable1= 1234;  

    } 
} 

class Search 

    private $variable1; 

$variable1=1234; 

    function __construct() 
    { 

    } 
} 

,如果我需要在不同的方法來訪問的值不它對我選擇的方法有什麼影響?

謝謝

+1

一個區別是第二個版本不解析。 – mario 2011-03-23 14:55:06

回答

5

的d對象和類變量之間的區別是你如何訪問它們。

  • 對象變量:$obj->var
  • 類變量:class::$var

您的類定義應該是:

class Search { 
    static $variable = 2; // only accessible as Search::$variable 
} 

對戰:

class Search2 { 
    var $variable = "object_prop"; 
} 

無論您使用的是var還是publicprivate訪問修飾符都不會使變量成爲對象屬性。決定性因素是它沒有被聲明爲static,因爲這會使其僅作爲類變量訪問。

1

在你的第一個方法變量沒有聲明爲private,這樣你就可以從訪問變量 對象外, 而在你的第二個方法只允許類的內部使用

2

然而,如果你在調用變量/屬性之前沒有聲明變量/屬性,你會得到一個警告,說變量不存在。

這是做這種方式的最佳實踐:

class Search { 

    private $_variable1; 

    function __construct() { 
    $this->_variable1=1234; 
    } 

} 

注:私有變量只提供給他們在聲明的類

+0

不,他們不是,$ this->變量將聲明該變量爲公共,你可以編輯它...這是他的兩種方法合併^^ – sharpner 2011-03-23 14:55:25

+0

@sharpner。我在回答後發現了這個問題。然而,問題是在不同的方法中訪問變量,而不是從課外。 – RDL 2011-03-23 14:57:53

+0

投票原因爲何? – RDL 2011-03-23 14:59:59

2

好於星(只是爲了更好的做法)使用。 _(下劃線)如果一個方法或屬性是私有/保護的,所以你的代碼應該是這樣的:

class Search 
{ 
    private $_variable1 = 1234; 

    //example usage 
    public function someMethod() 
    { 
     if ($this->_variable1 == 1234) { 
      //do smth 
     } 
    } 
}