今回紹介する「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の使い方を解説しました。
メソッドの存在を確認しましたが、クラスが定義済みかどうかや指定した関数が定義されているかどうかを判別するメソッドもあるので必要な時があれば使ってみましょう。
コメント