【 PHP 】PHP8に入門してみた 215日目 PHPの基本 ( オブジェクト指向 マジックメソッド その2)

PHP8技術者認定初級試験 が始まるようなので 試験に向けて (できるだけ)勉強しようと思います! 使用する書籍は独習PHP 第4版(山田 祥寛)|翔泳社の本 (shoeisha.co.jp) となります。

オブジェクト指向

マジック! その2

__isset__unsetの例です。

MyClassというクラスを定義し、__set()、__get()、__isset()、__unset()メソッドを定義しています。
__isset()メソッドは、isset()関数が呼び出されたときに自動的に呼び出されるメソッドで、オブジェクトのプロパティが定義されているかどうかを返します。
__unset()メソッドは、unset()関数が呼び出されたときに自動的に呼び出されるメソッドで、オブジェクトのプロパティを削除します。

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8" />
    <title>こんにちは!</title>
    <!-- Bootstrapを有効化 -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" />
</head>

<body>
    <?php
    class MyClass
    {
        private $data = array();

        public function __set($name, $value)
        {
            $this->data[$name] = $value;
        }

        public function __get($name)
        {
            if (array_key_exists($name, $this->data)) {
                return $this->data[$name];
            } else {
                return null;
            }
        }

        public function __isset($name)
        {
            return array_key_exists($name, $this->data);
        }

        public function __unset($name)
        {
            unset($this->data[$name]);
        }
    }

    $obj = new MyClass();
    $obj->name = "John"; // __set()メソッドが呼び出される
    echo isset($obj->name); // __isset()メソッドが呼び出される
    unset($obj->name); // __unset()メソッドが呼び出される
    echo isset($obj->name); // __isset()メソッドが呼び出される


    ?>
</body>

</html>

最後に、$objというオブジェクトを生成し、$obj->nameというプロパティに値を設定し、isset()関数で存在を確認しています。その後、unset()関数でプロパティを削除し、再度isset()関数で存在を確認しています。この場合、isset()関数によって、__isset()メソッドと__unset()メソッドがそれぞれ呼び出されます。

メモ

トリガーみたいなうごきですね。

PHPPHP

Posted by raika@blog