他ファイルに対象のメソッドが存在するかを確かめる方法【 Laravel 】

よーすけ
今回は「method_exists」について解説するよ

今回紹介する「method_exists」は、

他のファイルに対象のメソッドが存在するかどうかを確認したいときに使うことができます。

それでは使い方を見ていきましょう。

目次

method_existsの使い方

method_exists(object|string $object_or_class, string $method): bool

※php公式ドキュメントより引用

まず、第一引数の$object_or_classですが、ここにはインスタンス化したオブジェクトもしくはクラス名が入ります。

対象のメソッドがあるかどうかを探したいファイルのクラスやオブジェクトと指定します。

そして、第二引数では調べたいメソッド名を記述します。

例えば、UserクラスにgetUserInfo()メソッドが存在するかどうかを調べたいとします。

その場合は以下のように記述します。

<?php

class User {
    public function getUserInfo() {
        
    }

    public static function addUserInfo() {
        
    }
}

$user_class = new User();
method_exists($user_class, 'getUserInfo');  // true
method_exists($user_class, 'deleteUser');   // false

method_exists('User', 'addUserInfo');       // true

まずは、以下の部分について解説します。

$user_class = new User();
method_exists($user_class, 'getUserInfo');  // true
method_exists($user_class, 'deleteUser');   // false

ここでは$user_classにUserクラスをインスタンス化して変数に格納しています。

その後、method_existsを用いて第一引数に先ほどインスタンスす格納した変数、$user_classを指定します。

第二引数にはそれぞれ、'getUserInfo''deleteUser'をそれぞれ指定し、調べたいメソッド名を指定します。

結果ですが、'getUserInfo'はUserクラス内に存在するのでtrue'deleteUser'は存在しないのでfalseになります。

また、staticで静的メソッドを指定した場合は、インスタンス化せずにクラス名を指定することで調べることができます。

method_exists('User', 'addUserInfo');

上記の部分です。クラス名であるUserを第一引数に指定しています。

method_existsの返り値はbool型です。true or falseで取得できます。

なので実際の使われ方としては、以下の通りです。

if(method_exists('User', 'getTargetInfo')) {
    $data = User::getTargetInfo();
}

Userクラスの中に'getTargetInfo'があった場合のみ'getTargetInfo'を実行するという意味のコードになります。

method_existsがない場合は、エラーとなってしまうため、エラー回避に用いることができます。

まとめ

今回は、method_existsの使い方を解説しました。

メソッドの存在を確認しましたが、クラスが定義済みかどうかや指定した関数が定義されているかどうかを判別するメソッドもあるので必要な時があれば使ってみましょう。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

よーすけのアバター よーすけ プログラマー

2022年4月 大阪自社開発会社入社
使用言語:JavaScript / PHP / Laravel / Vue.js / (WordPress)
勉強中:React / Next.js / TypeScript

Web制作実績:6件
デザインからコーディング、運用まで幅広く行います
ご依頼はお問い合わせフォームからお願いします。

コメント

コメントする

目次