これが可能かどうか疑問に思っています:
__set() マジック メソッドを使用して、クラスのプロパティに値を設定することに成功しました。
class View
{
private $data;
public function __set( $key, $value )
{
$this->data[$key] = $value;
}
}
だから私はできる:
$view = new View();
$view->whatever = 1234;
たとえば、文字列を連結したいときに問題が発生します。__set() が呼び出されていないようです (実際には呼び出されていません)。
$view = new View();
$view->a_string = 'hello everybody'; //Value is set correctly
$view->a_string.= '<br>Bye bye!'; //Nothing happens...
echo $view->a_string;
これにより、「hello everyone」が出力されます。2 番目の割り当てで __set() を実行できません。php.net を読むと、次のように書かれています。
__set() is run when writing data to inaccessible properties.
したがって、a_stringが既に存在するため、__set は呼び出されません。私の質問は最終的に...どうすればその連結操作を達成できますか??
注: わかりました... マーフィーが来て、私がこれを投稿するとすぐに答えをくれました...
答え (私が理解しているように) は、__get() メソッドを定義していないため、 a_stringが使用可能かどうかを PHP が判断できないということです。
__get() を定義すると、php はa_stringの現在の値を見つけ、 __set() を使用して値を連結できます。