エンジニアのひよこ_level10

毎日更新してた人。たまに記事書きます。

【PHP】traitを使って、関数を余分な場所に読み込ませない【223日目】

注意

traitの本質とは違います。オブジェクト指向とかも触れません。

ただ、trait使った時に、実際の動きとしてどんな違いが出るかについてのメモ書きになります。

2つのファイル

hello.php

<?php
public function sayHello() {
    echo 'Hello World!';
}

human.php

<?php
require_once 'hello.php'

class boy {
    public function main() {
        sayHello();
    }
}

class girl {
    public function main() {
        sayHello();
    }
}

sayHello();

これだと、human.phpの中は全てhello.phpのsayHello()が読み込めてしまう。

違うんだ。私はboyクラスにだけsayHello()をもたせたかったんだ。

traitを使ってみる

hello.php

trait HelloWorld {
    public function sayHello() {
        echo 'Hello World!';
    }
}

human.php

<?php
require_once 'hello.php'

class boy {
    use HelloWorld;
    public function main() {
        $this->sayHello();
    }
}

// sayHello(); 読み込めない

これでよし。

公式ドキュメント

PHP: トレイト - Manual