ホームページ >バックエンド開発 >PHPチュートリアル >PHPマジックメソッドチートシート

PHPマジックメソッドチートシート

William Shakespeare
William Shakespeareオリジナル
2025-03-07 11:25:09590ブラウズ

PHP Magic Methods Cheatsheet

この記事は、簡単に参照できるPHPマジックメソッドの簡単な検索表を提供します。

PHP開発の経験豊富なPHP開発者であるか、PHP開発の初心者であるか、PHPオブジェクト指向プログラミングを使用している場合は、少なくともいくつかのPHPマジックメソッドを使用している必要があります。 PHPの魔法の方法を聞いたことがない場合は、紹介しましょう。

PHPは、

__destruct()__callStatic()__set()__unset()__wakeup()__invoke()__clone()__get()__call()などの多くの魔法の方法を提供します。 これらの方法であまりにも多くのコードを作成しないでください。明確さとメンテナンスの考慮事項のために、メンバーの習得と設定のために明確に定義された方法を定義するか、クラスの方法を定義することが最善です。 __serialize()および__unserialize()メソッドには、仮想プロパティを使用する必要があります。

例:

<?php 
class Student {
    private $name;
    private $email;
    private $phone;
    private $db_connection_link;

    public function __construct($name, $email, $phone) 
    {
        $this->name = $name;
        $this->email = $email;
        $this->phone = $phone;
    }

    public function __serialize()
    {
        return ['name' => $this->name, 'email' => $this->email, 'mobile' => $this->phone];
    }

    public function __wakeup($data)
    {
        $this->name = $data['name'];
        $this->email = $data['email'];
        $this->phone = $data['mobile'];

        $this->db_connection_link = your_db_connection_function();
    }
}
?>

__wakeup()および__serialize()メソッドは、__unserialize()メソッドが同時に定義されている場合にのみ呼び出されることに注意する必要があります。

__invoke()メソッド

__invoke()マジックメソッドは、関数のようにオブジェクトを呼び出そうとするときに呼ばれる特別な方法です。まず、それがどのように機能するかを見て、次にこの魔法の方法が何であるかを見てみましょう。

<?php 
class Student {
    private $name;
    private $email;

    public function __construct($name, $email) 
    {
        $this->name = $name;
        $this->email = $email;
    }

    public function __invoke()
    {
        echo 'Student 对象被当作函数调用!';
    }
}

$objStudent = new Student('John', 'john@tutsplus.com');
$objStudent();
?>

ご覧のとおり、$objStudentオブジェクトは関数として扱われ、__invoke()メソッドを定義したため、エラーを返す代わりに呼び出されます。 __invoke()メソッドの主な目的は、オブジェクトを呼び出すものとして扱いたい場合にこの方法を実装できることです。

__clone()メソッド

既存のオブジェクトをコピーする場合は、cloneキーワードを使用できます。ただし、クローニング後、クローンオブジェクトのプロパティを変更したい場合は、クラスの__clone()マジックメソッドを定義できます。

<?php 
Class Student_School {}

class Student {
    private $name;
    private $email;
    private $object_student_school;

    public function __construct()
    {
        $this->object_student_school = new Student_School();
    }

    public function __clone()
    {
        $this->object_student_school = clone $this->object_student_school;
    }
}

$objStudentOne = new Student();
$objStudentTwo = clone $objStudentOne;
?>

上記の方法の問題は、クローニング時にオブジェクトの浅いコピーを作成するため、クローンされたオブジェクトの内部オブジェクトがクローン化されないことです。

上記の例では、メソッドを定義していない場合、クローン化されたオブジェクトは、

オブジェクトによって参照される同じ__clone()オブジェクトを指します。したがって、$objStudentTwoメソッドを実装することにより、メインオブジェクトと一緒にクローン化されている$objStudentOneオブジェクトが確認されます。 Student_School __clone()Student_Schoolメソッド

__debugInfo()

関数を使用してオブジェクトをダンプしようとするときに魔法の方法が呼び出されます。クラスでこの方法を定義しない場合、すべてのパブリック、プライベート、保護されたプロパティをダンプします。したがって、ダンプ時に表示される情報を制限する場合は、この方法を使用できます。

<?php 
class Student {
    private $name;
    private $email;
    private $phone;
    private $db_connection_link;

    public function __construct($name, $email, $phone) 
    {
        $this->name = $name;
        $this->email = $email;
        $this->phone = $phone;
    }

    public function __serialize()
    {
        return ['name' => $this->name, 'email' => $this->email, 'mobile' => $this->phone];
    }

    public function __wakeup($data)
    {
        $this->name = $data['name'];
        $this->email = $data['email'];
        $this->phone = $data['mobile'];

        $this->db_connection_link = your_db_connection_function();
    }
}
?>

このメソッドは、オブジェクトで呼び出されたときに表示されるキー価値ペアの配列を返す必要があります。ご覧のとおり、var_dump()関数を使用してオブジェクトをダンプするときに表示したいものを完全に制御できます。 var_dump()

メソッド__set_state()

メソッドは、__set_state()関数で使用される静的メソッドです。 var_export()関数変数に関する構造化された情報を出力します。この関数を使用してクラスをエクスポートする場合、クラス内のvar_export()メソッドを定義する必要があります。 __set_state()

<?php 
class Student {
    private $name;
    private $email;

    public function __construct($name, $email) 
    {
        $this->name = $name;
        $this->email = $email;
    }

    public function __invoke()
    {
        echo 'Student 对象被当作函数调用!';
    }
}

$objStudent = new Student('John', 'john@tutsplus.com');
$objStudent();
?>
ご覧のとおり、エクスポートされた文字列は、元のオブジェクトを復元するために使用できる有効なPHPコードです。

要約

この記事では、PHPで利用可能なすべての魔法の方法を紹介します。各アプローチについて、私はあなたがその目的を理解するのに役立つ短いが意味のある例を提供しました。この記事を、毎日のPHP開発の迅速な参照またはクイックルックアップテーブルとして使用できることを願っています。

この記事は更新され、Monty Shokeenからの貢献が含まれています。 Montyはフルスタックの開発者であり、チュートリアルの作成や新しいJavaScriptライブラリの学習も大好きです。

以上がPHPマジックメソッドチートシートの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。