2017-04-14 86 views
3

在使用PHP類時,我注意到在一個類內部,當我以'$ this-> variablename方式'在函數中定義一個變量作爲該類的屬性時,它會自動變成該類的公共變量。在PHP類中可以在函數內部創建一個私有變量嗎?

class example { 
    public function setstring(){ 
    $this->string = "string"; 
    } 
} 

這樣

$class = new example(); 
echo $class->string; 

輸出:串;

但是,如果我想創建只能在類中的函數訪問私有變量的情況下,是否有聲明它們只在函數setstring()內?而不是像這樣在函數之外聲明它們是私有的。

class example { 
    private $string =''; 
    public function setstring(){ 
      $this->string = "string"; 
    } 
} 

的原因有人可能做到這一點是整潔,以免有任何類別的beggining聲明私有變量的一個長長的清單。

+1

也許使用私有數組來存儲變量和值? – AbraCadaver

+3

你稱之爲「整潔」我稱之爲模棱兩可。在大多數情況下,所有的屬性都應該在類的頂部進行聲明,特別是私人類。這樣你就知道對象預期會有什麼屬性。要回答你的問題,不,所有動態聲明的屬性默認都是公共的。 – jfadich

回答

5

沒有,沒有辦法做到這一點。

在PHP中,您通常會聲明全部您的類/實例屬性在您的函數之上按照字母順序排列,並帶有自記錄註釋。這是編寫課程的最「清晰」和清晰的方式。還建議您完全避免使用公共屬性,並根據需要使用getter和setter。

PHP的規範編碼風格在PSR-1PSR-2中定義。我還建議您查看PHPDoc。請注意,在您的類方法範圍內聲明的變量對於該方法而言是私有的。如果您打算從其他方法訪問它,則只需要一個類屬性。

<?php 
class Example { 

    /** 
    * Holds a private string 
    * @var string 
    */ 
    private $string = ''; 

    /** 
    * Sets the private string variable 
    */ 
    public function setString() { 
    $this->string = 'This string is accessible by other methods'; 
    $privateVar = 'This string is only accessible from within this method'; 
    } 

} 
相關問題