2013-02-18 3 views
-1

Я получаю этот вопрос, когда я запускаю этот скрипт:Multiple вызывающей функции не работает

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

ответ

1

Вы не можете цеплять методы, подобные этому, вам нужны они, чтобы вернуть объект, чтобы сделать это. В противном случае вы должны вызывать каждый метод отдельно.

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

Большое спасибо за эту помощь – sanji

+0

Примечание: вы должны * действительно * просто позвонить им отдельно, иначе отладка станет болью. – PeeHaa

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'); 
Смежные вопросы