-1

运行此脚本时出现此问题:

致命错误:在第 16 行的 /opt/lampp/htdocs/test/index.php 中的非对象上调用成员函数 setAge()

<?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);
?>

我该如何解决这个问题?

4

3 回答 3

1

你不能像这样链接方法,你需要它们返回对象才能做到这一点。否则,您必须分别调用每个方法。

   public function setName($name,$value){
       $this->$name=$value;
       return $this;
   }
   public function setAge($name,$value){
       $this->$name=$value;
       return $this;
   }
于 2013-02-18T06:23:12.513 回答
0

对于“流利的接口”(如您所做的那样连续调用多个方法),您的方法需要return $this. 因为您正在对前者的返回值调用下一个方法。

如果你不这样做,你就不能使用流畅的界面风格。只需进行常规方法调用:

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

另请注意,您的方法毫无意义。应该是setAge(26),不是setAge('age', 26)。摆脱冗余。

于 2013-02-18T06:24:49.287 回答
0

i did that for setting object attributes dynamically.if any student have some different feature. then i can setting this. when i print student object for any student i want to see different feature for different student. that the reason i used this.(just ignore the function name)

$Student1->setName('name', 'sanjeewani')
$Student1->setAge('age', '26');
于 2013-03-13T10:36:01.757 回答