のぐそんブログ

暗いおじさんがシコシコ書くブログです。

PHPのマジックメソッドのメモ

マジックメソッド

マジックメソッドとは特定の状況で自動的に呼び出される__が頭についた関数です。 マジックメソッドは必ずpubulicで定義する必要があります。

contruct(),destruct()

__contruct()インスタンス生成時に実行されます。 __destruct()はプロセスの終了やunsetでインスタンスが破棄された場合に実行されます。

__toString()

オブジェクトを文字列にキャストした場合に呼びだされる。 自動キャストの場合も呼ばれる。

<?php

class MyClass
{
 public function __toString()
 {
     return 'this class is ' . __CLASS__;
 }
}

実行する。

<?php
require_once 'MyClass.php';

$my_class = new MyClass();
echo $my_class; // this class is MyClass

get()・set()

アクセスできないプロパティにアクセスした場合に呼び出されます。

<?php

class MyClass
{
    public function __get($name)
    {
        echo $name . 'はアクセスできません';
    }

    public function __set($name, $value)
    {
        echo $name . 'に' . $value . 'はアクセスできません';
    }
}
<?php
require_once 'MyClass.php';

$my_class = new MyClass();

$my_class->hogehoge; // hogehogeはアクセスはアクセスできません
$my_class->hogehoge = 'abc'; //hogehogeにabcはアクセスできません

isset(),unset()

アクセスできないプロパティにisset、unsetした場合に呼び出されます。

<?php

class MyClass

{
    public function __isset($value)
    {
        echo $value .'はアクセスできません';
    }

    public function __unset($value)
    {
        echo $value .'はアクセスできません';
    }
}
<?php
require_once 'MyClass.php';

$my_class = new MyClass();

isset($my_class->hogehoge); // hogehogeはアクセスできません
unset($my_class->hogehoge);// hogehogeはアクセスできません

call()、callStatic()

存在しないメソッドを呼んだ場合に実行されます

<?php

class MyClass

{
    public function __call($value,$arg)
    {
        echo $value .'は存在しません';
    }

    public static function __callStatic($value,$arg)
    {
        echo $value .'は存在しません';
    }
}
<?php
require_once 'MyClass.php';

$my_class = new MyClass();

$my_class->hogehoge(); // hogehogeは存在しません
$my_class::hogehoge();// hogehogeは存在しません

__invoke()

クラスを関数のようにつかえる。

<?php

class MyClass

{
    public function __invoke($value)
    {
        echo $value . 'です。';
    }
}
<?php
require_once 'MyClass.php';

$my_class = new MyClass();

$my_class('invoke');// invokeです。

その他

sleep()・wakeup()・・・シリアライズ、アンシリアライズしたタイミングで呼ばれます。 clone()・・・インスタンスをcloneした場合に呼ばれます。 set_state() ・・・ var_export() した文字列から復元するためstaticメソッド