2013-02-18 54 views
-1

當我運行該腳本,我得到這個問題:多個函數調用不工作

Fatal error: Call to a member function setAge() on a non-object in /opt/lampp/htdocs/test/index.php on line 16

<?php 

class Student { 

    public function setName($name,$value){ 
     $this->$name=$value; 
    } 
    public function setAge($name,$value){ 
     $this->$name=$value; 
    } 

} 

$Student1=new Student; 
$Student1->setName('name', 'sanjeewani') 
     ->setAge('age', '26'); 

var_dump($Student1); 
?> 

我怎樣才能解決這個問題?

+0

不投票和離開,說出了什麼問題。除非他/她從來沒有得到正確的。 – sampathpremarathna 2013-03-14 17:35:16

回答

1

你不能像這樣鏈接方法,你需要它們返回對象才能做到這一點。否則,你必須分別調用每個方法。

public function setName($name,$value){ 
     $this->$name=$value; 
     return $this; 
    } 
    public function setAge($name,$value){ 
     $this->$name=$value; 
     return $this; 
    } 
+0

非常感謝您的幫助 – sanji 2013-02-18 06:32:00

+0

注意:您應該*真的*只是單獨調用它們,否則調試將變得很痛苦。 – PeeHaa 2013-02-18 08:43:13

0

對於「流利接口」(調用連續幾個方法,你正在做的),你的方法需要return $this。因爲你在前者的返回值上調用下一個方法。

如果你不這樣做,你不能使用流暢的界面風格。只是做常規方法調用:

$Student1->setName('name', 'sanjeewani') 
$Student1->setAge('age', '26'); 

另外請注意,你的方法是毫無意義的。它應該是setAge(26),而不是setAge('age', 26)。擺脫冗餘。

0

我做到了動態設置對象屬性。如果任何學生有一些不同的功能。那麼我可以設置這個。當我爲任何學生打印學生對象時,我想爲不同的學生看到不同的功能。 (只是忽略功能名稱)

$Student1->setName('name', 'sanjeewani') 
$Student1->setAge('age', '26');