PHP のマジック メソッドはすべて「__」で始まり、クラス内でのみ使用できます。以下に例を書いてみました。
class Foo
{
private $privateVariable;
public $publicVariable;
public function __construct($private)
{
$this->privateVariable = $private;
$this->publicVariable = "I'm public!";
}
// triggered when someone tries to access a private variable from the class
public function __get($variable)
{
// You can do whatever you want here, you can calculate stuff etc.
// Right now we're only accessing a private variable
echo "Accessing the private variable " . $variable . " of the Foo class.";
return $this->$variable;
}
// triggered when someone tries to change the value of a private variable
public function __set($variable, $value)
{
// If you're working with a database, you have this function execute SQL queries if you like
echo "Setting the private variable $variable of the Foo class.";
$this->$variable = $value;
}
// executed when isset() is called
public function __isset($variable)
{
echo "Checking if $variable is set...";
return isset($this->$variable);
}
// executed when unset() is called
public function __unset($variable)
{
echo "Unsetting $variable...";
unset($this->$variable);
}
}
$obj = new Foo("hello world");
echo $obj->privateVariable; // hello world
echo $obj->publicVariable; // I'm public!
$obj->privateVariable = "bar";
$obj->publicVariable = "hi world";
echo $obj->privateVariable; // bar
echo $obj->publicVariable; // hi world!
if (isset($obj->privateVariable))
{
echo "Hi!";
}
unset($obj->privateVariable);
結論として、これらの魔法のメソッドを使用する主な利点の 1 つは、クラスのプライベート変数にアクセスしたい場合 (これは多くのコーディング慣行に反します)、特定のものが実行されたときのアクションを割り当てることができる場合です。つまり、変数の設定、変数のチェックなどです。
注意として、__get()
and__set()
メソッドはプライベート変数に対してのみ機能します。