【 PHP 】PHP8に入門してみた 207日目 PHPの基本 ( オブジェクト指向 トレイトでメタプログラミング)

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

オブジェクト指向

トレイトの応用

再利用可能で柔軟なコードを実現できます。
トレイトを使用して柔軟性の高いアクセサメソッドを作成する例です。

<!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
    trait AccessorTrait
    {
        private $data = [];

        public function __get($name)
        {
            return isset($this->data[$name]) ? $this->data[$name] : null;
        }

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

        public function __isset($name)
        {
            return isset($this->data[$name]);
        }

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

    class Person
    {
        use AccessorTrait;

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

    $person = new Person("John", 30);
    print($person->name . "<br />"); // "John"
    print($person->age . "<br />"); // 30
    $person->age = 31;
    print($person->age . "<br />"); // 31

    isset($person->name); // true
    unset($person->name);
    isset($person->name); // false


    ?>
</body>

</html>

メタプログラミング

トレイトを使用して柔軟性の高いアクセサメソッドを作成するコードは、一般的にメタプログラミングの一例として説明されます。

メタプログラミングとは、プログラムが自己を記述・生成・変更できることを指し、プログラムを作成するための手段として利用されます。
メタプログラミングには、コンパイル時に行われるものと、実行時に行われるものの2つがありますが、上記の例は実行時にメタプログラミングを行うものです。

具体的には、トレイトを使用して、__get、__set、__isset、__unsetといったマジックメソッドを自動的に生成しています。
これらのマジックメソッドは、実行時に動的に呼び出されるため、プログラムが自己を変更できるという特徴があります。

したがって、トレイトを使用して柔軟性の高いアクセサメソッドを作成するコードは、メタプログラミングの一例として説明されます。

メモ

動的にプロパティが生成できる!

PHPPHP

Posted by raika@blog