2013-06-02 169 views
-1

我剛開始學習PHP和我有它的語法的麻煩。我正在學習如何在php中編寫一個類,並且我使用了一種類似於Java的語法。但是,我既不能使用它的構造函數也不能使用常規方法工作,我無法弄清楚原因。PHP類的構造函數和方法

<?php 
class bento { 
    public $food; 
    public $staple = "rice"; 
    protected $veggie = "kale"; 

    public function __construct($fd){ 
    $food = $fd; 
    } 

    public function getstaple(){ 
    return $staple; 
    } 
} 

$chicken=new bento("chick"); 
echo "<br>".$chicken->food; 
echo "<br>".$chicken->staple; 
$fd=$chicken->getstaple(); 
echo "<br>".$fd; 
echo "<br>".$chicken->getstaple(); 
?> 

這裏是我已經得到了結果:

//result  

rice 


//end of result 

基本上,從4行,我只有一條線的工作(打印出$主食變量)。構造函數沒有將「小雞」值賦值給$ food。 getstaple()函數沒有返回任何值。

我無法弄清楚如何得到這個工作。

+0

您需要使用$ this作爲實例屬性,例如$ this-> food = $ fd。與Java不同,您不能直接引用屬性名稱。 –

+0

你會賣一些[bento](http://en.wikipedia.org/wiki/Bento)嗎?送一些西班牙! (; –

回答

2

要引用類成員,你應該使用這個 - $>食物或$這個 - >短纖

class bento { 
    public $food; 
    public $staple = "rice"; 
    protected $veggie = "kale"; 

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

    public function getstaple(){ 
    return $this->staple; 
    } 
} 
+0

太好了,謝謝你 –

+0

另外,你知道如何實現多個構造 在Java中,我可以做一些事情,如: 類便當{ 便當(){ 這個(「米」)!? ; } 便當(字符串FD){ 食品= FD; } –

+0

可以用PHP得到最接近的是與參數的默認值的構造函數:在Java中,你__construct($ FD = '米') – jcsanyi

0

在Java中一樣,你需要使用「本」關鍵字來訪問你的類變量。在PHP中,你會做這樣的事情:

$this->methodName(); 

$this->variableName 
+0

其實不需要明確引用「this」;這是與PHP的區別 –

+0

非常感謝你 –

0

在PHP中所有的變量是局部的,他們是中定義的範圍(與像超全局變量$ _GET幾個語言提供的例外, $ _POST,$ REQUEST,$ _SERVER等)。

這意味着當您在您的方法中引用$ food時,您指的是$ food,因爲它在該方法中定義,換句話說,函數變量與您想要的實例屬性。

例如方法PHP很好,可以爲您創建對名爲$this的方法進行調用的實例的引用。這允許您通過此格式引用對象本身內的對象的屬性和方法。

$this->food = $fd 

另一件需要注意的是類方法和屬性不能以這種方式訪問​​。他們需要使用範圍解析操作::所以得到在staticly定義的類屬性或方法可以使用:

ClassName::method(); 

ClassName::$property; 

$this PHP提供了一些簡單的訪問通過selfstatic關鍵字分類。

self是對定義靜態方法的類的引用。

static是對靜態方法被調用的類的引用。

爲了說明差異看到這個代碼

class A { 
    static public $toWho = "Class A"; 

    static public function sayHelloSelf(){ 
      echo "Hello ".self::$toWho; 
    } 

    static public function sayHelloStatic(){ 
      eecho "Hello ".static::$toWho; 
    } 
} 

class B extends A { 
    static public $toWho = "Class B"; 
} 

B::sayHelloSelf(); // echos Hello Class A 
B::sayHelloStatic(); // echos Hello Class B 
0

這個關鍵字用於當前類中訪問類成員。 您可以創建您爲變量$ food分配一些值的類。 然後在你嘗試訪問變量的函數中,但$ food是類變量,我們無法在沒有對象或範圍解析運算符的情況下訪問類成員。 「this」有當前的對象名稱。

相關問題