[PHP]クラスメソッドをキャメルケース、スネークケースのどちらでも呼び出せるようにする

Pocket

PHP のクラスメソッドは基本的にキャメルケース(camelCase)で命名されることが多いのですが、プロジェクトによっては単語をアンダーバーで区切るスネークケース(snake_case)が使われることもあります。
どちらにするかは自由ですが、プロジェクト全体で統一するのが望ましいとされています。

自分で作ったクラスをほかのプロジェクトでも再利用する場合、必要に応じて命名記法を書き換える事がありますが、マジックメソッドの __call(), __callStatic() を利用すると存在しない存在しない名前のメソッドが呼び出されようとしたときの処理を定義できるため、キャメルケース、スネークケースのどちらで呼び出されても同じメソッドが実行される仕組みを作ることができます。

<?php
class Example
{
    public function __call($name, $args) {
        $name = str_replace('_', '', ucwords($name, '_'));
	    $name[0] = strtolower($name[0]);
        return call_user_func_array([$this, $name], $args);
    }

    public static function __callStatic($name, $args) {
        $name = str_replace('_', '', ucwords($name, '_'));
	    $name[0] = strtolower($name[0]);
        return call_user_func_array([self::class, $name], $args);
    }

    public function exampleMethod($str) {
        return "hello, " . $str;
    }

    static public function staticMethod($str){
        return "hello, " . $str;
    }
}

メソッドの呼び出し

$example = new Example();

echo $example->exampleMethod("World");
echo $example->example_method("World");

echo Example::staticMethod("World");
echo Example::static_method("World");
実行結果: Hello, World

Similar Posts:




コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です