PHP の is_callable() 関数と method_exists() 関数

青灯夜游
リリース: 2023-04-08 14:04:01
転載
2913 人が閲覧しました

PHP の is_callable() 関数と method_exists() 関数

多くの製品アプリケーションでは、オブジェクト内のメソッドが存在するかどうかを確認するために次のような使用法がよく見られます。

<?php
if (method_exists($object, &#39;SomeMethod&#39;)) {   
    $object->SomeMethod($this, TRUE); 
}
?
ログイン後にコピー

このコードの目的は比較的理解しやすいです。$object というオブジェクトがあります。それに SomeMethod というメソッドがあるかどうかを知りたいのです。ある場合は、このメソッドを呼び出します。

このコードは正しく見え、ほとんどの場合問題なく動作します。しかし、この $object オブジェクトのメソッドが現在の実行環境から見えない場合でも、プログラムは正常に実行できるのでしょうか?この関数名メソッドが存在するのと同様に、提供したクラスまたはオブジェクトに期待するメソッドがあるかどうかをチェックするだけです。ある場合は TRUE を返します。そうでない場合は FALSE を返します。可視性の問題はここでは考慮されません。したがって、プライベート メソッドまたはプロテクト メソッドを偶然決定した場合、正しい戻り値を取得できますが、実行時に「致命的エラー」エラー警告が表示されます。

上記のコードの本当の意図は、提供されたクラスまたはオブジェクトに対して、現在のスコープでその SomeMethod メソッドを呼び出すことができるかどうかということです。これが is_callable() 関数の目的です。 is_callable()関数はコールバック パラメーターを受け取り、関数名またはメソッド名とオブジェクトを含む配列を指定できます。現在のスコープで実行できる場合は、TRUE を返します。

<?php
if (is_callable(array($object, &#39;SomeMethod&#39;))) {
      $object->SomeMethod($this, TRUE); 
}?>
ログイン後にコピー

2 つの関数の違いを説明するために例を示します。

<?php
class Foo {
    public function PublicMethod(){}
    private function PrivateMethod(){}
    public static function PublicStaticMethod(){}
    private static function PrivateStaticMethod(){}
}
$foo = new Foo();
$callbacks = array(
    array($foo, &#39;PublicMethod&#39;),
    array($foo, &#39;PrivateMethod&#39;),
    array($foo, &#39;PublicStaticMethod&#39;),
    array($foo, &#39;PrivateStaticMethod&#39;),
    array(&#39;Foo&#39;, &#39;PublicMethod&#39;),
    array(&#39;Foo&#39;, &#39;PrivateMethod&#39;),
    array(&#39;Foo&#39;, &#39;PublicStaticMethod&#39;),
    array(&#39;Foo&#39;, &#39;PrivateStaticMethod&#39;),
   );
foreach ($callbacks as $callback){
    var_dump($callback);
    var_dump(method_exists($callback[0], $callback[1]));
    var_dump(is_callable($callback));
    echo str_repeat(&#39;-&#39;, 10);
    echo &#39;<br />&#39;;
}
ログイン後にコピー

上記のスクリプトを実行すると、2 つの関数の違いが明確にわかります。

is_callable()提供されたクラスやメソッドをチェックするのではなく、関数やメソッドの構文が正しいかどうかだけをチェックするなど、他の用途もあります。 method_exists() と同様に、is_callable() はクラスの自動ロードをトリガーできます。

オブジェクトにマジックメソッド __call がある場合、メソッドを判断するときに method_exists() は FALSE を返し、is_callable() は返します。真実。

<?php
class MethodTest {
    public function __call($name, $arguments){
      echo &#39;Calling object method &#39; . $name . &#39; &#39; .implode(&#39;, &#39;, $arguments);
      echo &#39;<br />&#39;;
    }
}
$obj = new MethodTest();
$obj->runtest(&#39;in object context&#39;);
var_dump(method_exists($obj,&#39;runtest&#39;));
var_dump(is_callable(array($obj,&#39;runtest&#39;)));
echo &#39;<br />&#39;;
ログイン後にコピー

実行結果

Calling object method runtest in object context 
bool(false) bool(true)
ログイン後にコピー

PHP の is_callable() 関数と method_exists() 関数

推奨: PHP ビデオ チュートリアル

以上がPHP の is_callable() 関数と method_exists() 関数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
php
ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!