2013-02-16 79 views
0

我從php.net網站裏面的代碼的類屬性:修改類功能

<?php 
class foo { 
    public $foo; 
    public $bar; 
    public function foo() { 
     $this->foo = 'Foo'; 
     $this->bar = array('Bar1', 'Bar2', 'Bar3'); 
    } 
} 

$foo = new foo(); 
echo <<<EOT 
I am printing some $foo->foo. 
Now, I am printing some {$foo->bar[1]}. 
EOT; 
?> 

但我很困惑,什麼是每一個「富」代表什麼?你真的可以在不調用函數的情況下修改方法(函數)中的屬性(變量)嗎?

我寫了類似的代碼,但什麼都沒有發生

<?php 
class page { 
    public $meta; 
    public $buttons; 
    public function show_meta() { 
     $this->meta = "I'm a website"; 
     $this->buttons = array(
      "home" => "index.php", 
      "about" => "about.php" 
      ); 
    } 
} 

$index = new page(); 
echo $index->meta; 
echo $index->buttons["home"]; 
?> 

我是一個PHP的學習者,我需要你的幫助,請:)

+0

你得到的代碼有什麼錯誤?你可以修改變量,因爲它們是公開的,它們是私人的,你不能這樣做。 – 2013-02-16 17:23:33

+0

我想如果你在構造函數中聲明按鈕數組,你會得到你想要的結果。 'show_meta()'方法沒有被調用,因此你的數組沒有被初始化。您必須至少調用一次該方法來初始化數組。糾正我,如果我worng – harsh8888 2013-02-16 17:29:24

回答

2

function foo是PHP4風格的構造函數(注意函數與班級同名)。在PHP5中,您可以改爲編寫function __construct()

new foo()實際上調用構造函數,初始化您的變量。

0

首先,是的,因爲你的屬性是public

在第二種情況下,您可以使用字符串引用來刪除警告。

$index->buttons["home"]; 

您永遠不會撥打show_meta,這樣數組永遠不會被填充。

0

這是構造函數方法的舊php語法。構造函數是特殊的方法,只要創建了類中的新對象,就會調用它。對於構造函數的新命名規則而言,所有構造函數都被命名爲__construct

爲了使上面的代碼正常工作,您必須在訪問兩個變量之前調用show_meta,或者使show_meta成爲構造函數。

$index = new page(); 
$index->show_meta(); 
echo $index->meta; 
echo $index->buttons["home"]; 

順便說一句..家庭是一個字符串,應該是裏面的「」,或者您籌集到至少一個警告。

+0

感謝您的提示!我非常感謝它! – nut 2013-02-16 17:40:58