2009-12-30 196 views
10

如何設置公共變量。這是正確的?:設置公共類變量

class Testclass 
{ 
    public $testvar = "default value"; 

    function dosomething() 
    { 
    echo $this->testvar; 
    } 
} 

$Testclass = new Testclass(); 
$Testclass->testvar = "another value";  
$Testclass->dosomething(); 
+3

你的方式是好的 – Greg 2009-12-30 17:52:17

回答

21

這是這樣,但我會建議爲該變量寫一個getter和setter。

class Testclass 

{ 
    private $testvar = "default value"; 

    public function setTestvar($testvar) { 
     $this->testvar = $testvar; 
    } 
    public function getTestvar() { 
     return $this->testvar; 
    } 

    function dosomething() 
    { 
     echo $this->getTestvar(); 
    } 
} 

$Testclass = new Testclass(); 

$Testclass->setTestvar("another value"); 

$Testclass->dosomething(); 
+4

帶setter和getter,你應該把$ testvar設置爲private :) – nXqd 2011-07-05 01:15:23

+0

哦,是的,那樣會更合適。感謝您指出。 – marvin 2011-07-11 10:56:44

+1

你爲什麼這麼建議?這是現在過時還是一個好方法? – tehlivi 2017-10-11 15:40:41

0

class Testclass

public function __construct($new_value) 
{ 
    $this->testvar = $new_value; 
} 
0

你 「設置」 變量/屬性的值。不重寫或重載它。你的代碼非常非常普通。

所有這些術語(「set」,「override」,「overload」)都有特定的含義。覆蓋和重載是關於多態(子類化)。

http://en.wikipedia.org/wiki/Object-oriented_programming

多態性使程序員可以把派生類成員只是他們的父類的成員等。更確切地說,面向對象編程中的多態性是屬於不同數據類型的對象響應相同名稱方法的方法調用的能力,每個方法根據適當的類型特定行爲進行響應。一種方法或運算符(如+, - 或*)可以抽象地應用於許多不同的情況。如果一個狗被命令說(),這可能會引發一個樹皮()。然而,如果豬被命令說(),這可能會引發一個oink()。它們都繼承了Animal的speak(),但它們的派生類方法覆蓋了父類的方法;這是覆蓋多態性。重載多態性是使用一個方法簽名或一個操作符(如「+」)根據實現來執行幾個不同的函數。例如,「+」運算符可用於執行整數加法,浮點加法,列表級聯或字符串級聯。 Number的任何兩個子類,例如Integer和Double,都應該在OOP語言中正確添加。因此,語言必須重載加法運算符「+」,以這種方式工作。這有助於提高代碼的可讀性。實現方式因語言而異,但大多數OOP語言至少支持某種程度的重載多態。

+0

是啊......只是用錯了長期 – Cudos 2009-12-30 17:42:19

+0

Overload和Override和設置都有特定的含義。你有沒有得到你正在尋找的關於你的代碼的答案?或者您是否正在專門查找有關重載的信息? – 2009-12-30 17:45:28

+0

剛剛看到您最近編輯的問題。你做對了。正如其他人所說的,如果你願意,你可以使用get和set方法,但是你不需要。它們具有優勢,特別是在設置數據之前需要驗證數據是否屬於某種類型。 – 2009-12-30 17:50:59

0

重載你需要一個子類:

class ChildTestclass extends Testclass { 
    public $testvar = "newVal"; 
} 

$obj = new ChildTestclass(); 
$obj->dosomething(); 

此代碼將回聲newVal

0

將getter和setter方法添加到您的班級。

public function setValue($new_value) 
{ 
    $this->testvar = $new_value; 
} 

public function getValue() 
{ 
    return $this->testvar;   
} 
2

使用構造函數。

<?php 
class TestClass 
{ 
    public $testVar = "default value"; 
    public function __construct($varValue) 
    { 
     $this->testVar = $varValue;    
    } 
}  
$object = new TestClass('another value'); 
print $object->testVar; 
?> 
+0

你的代碼沒有意義,它不會輸出任何東西 – Greg 2009-12-30 17:53:05

+2

現在檢查,我把testvar改成testVar – 2009-12-30 17:57:45

0

如果你要遵循給出的例子(使用的getter/setter或在構造函數中設置它)將其更改爲私有,因爲這些辦法控制什麼是變量設置。

將所有這些東西添加到課堂中讓公共屬性公開是沒有意義的。

4
class Testclass 
{ 
    public $testvar; 

    function dosomething() 
    { 
    echo $this->testvar; 
    } 
} 

$Testclass = new Testclass(); 
$Testclass->testvar = "another value";  
$Testclass->dosomething(); ////It will print "another value"