-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

オブジェクト属性を動的に設定するためにこれを行いました。生徒が別の機能を持っている場合。それから私はこれを設定することができます。生徒の生徒オブジェクトを印刷するとき、生徒ごとに異なる機能を表示したいと思います。私がこれを使用した理由(関数名は無視してください)

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