ホームページ  >  記事  >  バックエンド開発  >  PHP で一般的に使用されるマジック メソッド (概要共有)

PHP で一般的に使用されるマジック メソッド (概要共有)

WBOY
WBOY転載
2022-09-05 17:34:231596ブラウズ

(推奨チュートリアル: PHP ビデオ チュートリアル)

コンストラクター メソッド/__construct

クラスがインスタンス化されるとき

簡単に言うと、新しいクラスが作成されると、このメソッドは自動的に実行されます

<?php
class autofelix 
{
    public function __construct()
    {
        echo &#39;我是飞兔小哥~&#39;;
    }
}

new autofelix();

destroy メソッド/__destruct

クラスが破棄されたとき 自動的にトリガーされるタイミング

このメソッドをトリガーするには、unset メソッドを使用できます

<?php
class autofelix 
{
    public function __destruct()
    {
        echo &#39;我是飞兔小哥,别销毁我~&#39;;
    }
}

unset(new autofelix());

Clone メソッド/__clone

クラスのクローン作成時に自動的に呼び出されます

<?php
class autofelix 
{
    public function __clone()
    {
        echo &#39;我是飞兔小哥,我想克隆你~&#39;;
    }
}

$a = new autofelix();
clone $a;

non 静的呼び出しメソッド/__call

呼び出されるメソッドが存在しないか、権限が不十分な場合に自動的に呼び出されます

たとえば、クラス内で変更されたプライベート メソッドをクラス外から呼び出す場合

<?php
class autofelix 
{
    private function say() 
    {
        echo &#39;我是飞兔小哥~&#39;;
    }

    public function __call($name, $arguments)
    {
        echo &#39;你无权调用&#39; . $name . &#39;方法&#39;;
        die;
    }
}

(new autofelix())->say();

静的呼び出しメソッド/__callStatic

呼び出される静的メソッドが存在しない場合、または権限が不十分な場合に自動的に呼び出されます

たとえば、プライベートに変更されたメソッドを呼び出します。クラス外からクラス内の静的メソッド

<?php
class autofelix 
{
    private static function say() 
    {
        echo &#39;我是飞兔小哥~&#39;;
    }

    public function __callStatic($name, $arguments)
    {
        echo &#39;你无权调用&#39; . $name . &#39;方法&#39;;
        die;
    }
}

$a = new autofelix();
$a::say();

Print メソッド/__debugInfo

このメソッドは、var_dump() クラス オブジェクトのときに呼び出されます

このメソッドが定義されていない場合、 var_dump() はすべてのクラスを出力します。 Attribute

<?php
class autofelix 
{
    public function __debugInfo()
    {
        echo &#39;飞兔小哥给你温馨提示&#39;;
    }
}

var_dump(new autofelix());

Get member Attributes/__get

これを通じて、オブジェクト外のプライベート メンバー属性を取得できます

<?php
class autofelix 
{
    private $name = &#39;飞兔小哥&#39;;

    public function __get($name)
    {
        if(in_array($name, [&#39;name&#39;, &#39;age&#39;])) {
           echo $this->name;
        } else {
            echo &#39;不是什么东西都能访问的~&#39;;
        }
    }
}

(new autofelix())->name;

Get inaccessible Attributes/ __isset

ペアリングする場合 isset() または empty() を呼び出すときにアクセスできないプロパティが自動的に呼び出されます

<?php
class autofelix 
{
    private $name = &#39;飞兔小哥&#39;;

    public function __isset($name)
    {
        if(in_array($name, [&#39;name&#39;, &#39;age&#39;])) {
           echo $this->name;
        } else {
            echo &#39;不是什么东西都能访问的~&#39;;
        }
    }
}

isset(new autofelix()->name);

属性の割り当て/__set

に値を割り当てるときにトリガーされます未定義のプロパティ

<?php
class autofelix 
{
    public function __set($name, $value)
    {
        echo &#39;你想给&#39; . $name . &#39;赋值&#39; . $value;
    }
}

(new autofelix())->name = &#39;飞兔小哥&#39;;

オブジェクト自体を呼び出す/__invoke

オブジェクト自体を関数として直接使用することはできません

オブジェクトが関数として呼び出される場合、このメソッドは次のようになります。 triggered

<?php
class autofelix 
{
    public function __invoke()
    {
        echo &#39;你想调用我?&#39;;
    }
}

(new autofelix())();

Serialization call / __sleep

serialize() がクラス外で呼び出されたときに自動的に呼び出されます

<?php
class autofelix 
{
    public function __sleep()
    {
        echo &#39;我是飞兔小哥~&#39;;
    }
}

serialize(new autofelix());

Deserialization call/__wakeup

になりますunserialize() メソッドの実行時に呼び出されます 自動呼び出し

<?php
class autofelix 
{
    public function __wakeup()
    {
        echo &#39;我是飞兔小哥~&#39;;
    }
}

unserialize(new autofelix());

出力文字呼び出し/__toString

クラスが文字列として扱われるときに返されるもの

文字列型ここで返される必要があります。そうでない場合は、致命的なエラーが報告されます。

<?php
class autofelix 
{
    public function __toString()
    {
        return &#39;我是你得不到的对象...&#39;;
    }
}

$a = new autofelix();
echo $a;

Delete call/__unset

アクセスできないプロパティに対して unset() が呼び出される場合、自動的に

<?php
class autofelix 
{
    private $name = &#39;飞兔小哥&#39;;

    public function __unset($name)
    {
        echo &#39;别删我,我是你兔哥&#39;;
    }
}

$a = new autofelix();
unset($a->name);
# が呼び出されます。 ## (推奨チュートリアル:

PHP ビデオ チュートリアル)

以上がPHP で一般的に使用されるマジック メソッド (概要共有)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjb51.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。