2016-08-11 2 views
-4

私は次のスクリプトを試していますが、新しい値を処理していないようですbt __set私はthisの記事を読もうとしています。 。何か不足していますか?ここセッターは新しいゲッター値を取得しません

class MyClass{ 
public $name = "Mike"; 

     private function __setProperty($newval){ 
      $this->name = $newval; 
     } 

     public function __getProperty(){ 
      return $this->name; 
     } 
    } 
$obj = new MyClass; 

//var_dump($obj); 
echo $obj->name; 
$obj->getProperty("Angela"); 
echo $obj->getProperty(); 
+1

は、明記しました ' setProperty' ... '$ obj = new MyClass; echo $ obj-> getProperty(); //プロパティ値を取得する $ obj-> setProperty( "私は新しいプロパティ値です!"); //新しいものを設定する echo $ obj-> getProperty(); //変更を表示するためにもう一度それを読んでください。代わりに 'getProperty'を使用しています。あなたはそのチュートリアルに従わなかった* "Tに" *。 –

+0

'__'で始まるメソッド名の宣言を禁止します。彼らは通常、PHPマジックメソッドのために保存されています。ここで使用している使用法は、 '__set'や' __get'とはまったく関係ありません。 – SOFe

+0

メソッドに '__'を使用すると奇妙です(そして間違っています、接頭辞付きのメソッドは魔法になりがちです)。セッターは決して呼び出されません(プライベート宣言されます)。実際にプロパティを実際に設定しているのは決してありません... –

答えて

0

間違い$obj->getProperty("Angela");あなたはsetProperty

echo $obj->name; 
$obj->setProperty("Angela"); 
echo $obj->getProperty(); 

とあなたの関数を使用する必要がpublicないprivate

あると私はあなたがここに__set、PHP docsのexempleたいと思う:

public function __set($name, $value) 
{ 
    $this->data[$name] = $value; 
} 
+3

publicと宣言されたプロパティのための魔法のメソッドはあまり意味がありません –

+0

はい、しかし、彼は '__set'について話しています。 'getProperty'の代わりに' __set'と '__getProperty'を使います – MaximeK

4
  1. "Angela"にプロパティを設定しようとしましたが、setProperty()の代わりにgetProperty()メソッドを使用してください。
  2. あなたのプロパティ名は、2つの下線(__)で開始していますが(あなたが$obj->__setProperty()を使用するか、メソッド名を変更する必要がありますつまり、代わりの$obj->setProperty())せずにメソッドを呼び出す
  3. あなたsetProperty()方法は、それができないことを意味し、privateですクラス外でアクセスすることができます。オブジェクトレベルでアクセスできるようにするには、メソッドをpublicにする必要があります。

    class MyClass{ 
        public $name = "Mike"; 
    
        public function setProperty($newval){ 
         $this->name = $newval; 
        } 
    
        public function getProperty(){ 
         return $this->name; 
        } 
    } 
    $obj = new MyClass; 
    
    //var_dump($obj); 
    echo $obj->name; 
    $obj->setProperty("Angela"); 
    echo $obj->getProperty(); 
    

    この意志出力:


はにあなたのコードを変更

MikeAngelaあなたはあなたから学んでいると述べたチュートリアル

関連する問題