ホームページ  >  記事  >  バックエンド開発  >  PHP で __call() メソッドを使用する方法とオーバーロードの例の分析

PHP で __call() メソッドを使用する方法とオーバーロードの例の分析

伊谢尔伦
伊谢尔伦オリジナル
2017-07-03 11:47:501852ブラウズ

1. はじめに

call() メソッドまたは callStatic() メソッドはオーバーロードを実装するように設計されていますが、理解を容易にするために、それらを個別に理解することに注意してください。 ! !

call()メソッドの特徴は、それを使ってオーバーロードを実装することです〜

2つ目、call()メソッド

PHP5.3.0以降、もう一つcallStatic()が登場しました。追加されたメソッド。これらはすべて、PHP の マジック メソッド です。いわゆるマジック メソッドは、特定の瞬間にシステムが自動的に呼び出すメソッドです。これら 2 つに加えて、PHP には他にも魔法のメソッドがあります (マニュアルを参照)。マジック メソッドに関して、私の個人的な理解では、各マジック メソッドには 1 つの共通点があります。システムが自動的に呼び出すという 2 つの違いがあります。呼び出しの時間と呼び出し後の効果です call() の場合。そしてcallStatic()の呼び出し時間と関数(人気のポイントは呼び出し後の結果)、例えば(コードは以下の通り)

<?php
class A {
        public function test () {
                static::who();
                A::who();
                self::who();
                $this->who();
        }

        /**
         *私有方法
        */
        private function test2(){

        }

        public static function callStatic($a, $b) {
                var_dump(&#39;A static&#39;);
        }   
            
        public function call($a, $b) {
                var_dump(&#39;A call&#39;);
        }   
}

$a = new A;
$a->test();
A::test1();
$a->test2();
?>

出力は

このクリを通して、 2つの点を参照してください

・クラス内での呼び出し

inaccessible(このクラス内にある場合は、存在しないためアクセスできないだけですが、このクラスの外でアクセスできない場合は、アクセスできない可能性があります) access Rights)メソッド、objectメソッド、staticメソッドに関係なく、call()メソッドのみをトリガーできます ・クラス内の

inaccessibleメソッドがクラス外で呼び出された場合、 object メソッドは call() メソッドをトリガーし、static メソッドは callStatic() メソッドをトリガーします

ps、アクセスできないというのは存在しないことだけを意味するわけではありません

1. 別の例を挙げてください

class  MethodTest {
    public function call($name,$arguments) 
    {
         // 注意: $name 的值区分大小写
         echo "Calling object method &#39;$name&#39;的参数有多个,分别是:".implode (&#39;、&#39;,$arguments)."<br/>" ;
    }

     /**  PHP 5.3.0之后版本  */
     public static function callStatic($name,$arguments) 
    {
         // 注意: $name 的值区分大小写
         echo  "Calling static method&#39;$name&#39;的参数有多个,分别是:".implode (&#39;、&#39;,$arguments)."<br/>" ;
    }
}

 $obj=new MethodTest ;
 $obj->runTest (&#39;in object context&#39;,&#39;另外一个参数&#39;);

 MethodTest::runTest (&#39;in static context&#39;,&#39;另外一个参数&#39;);   // PHP 5.3.0之后版本

出力は

この栗を通して、2つの点を見るのは難しくありません

・call()またはcallStatic()メソッドがトリガーされると、システムは最初のパラメータとして呼び出されるアクセスできないメソッドのメソッド名を自動的にメソッドに渡します。 call() または callStatic() メソッドを呼び出し、呼び出される存在しないメソッドに渡されたパラメータを 2 番目のパラメータとして渡します (そして、それは配列にカプセル化されます。つまり、各要素は、アクセスできないメソッドを呼び出すときに渡されるパラメータです)メソッド) を call() または callStatic () メソッドに

そして、call または callStatic() メソッド内で、渡された 2 つのパラメーターに基づいていくつかの操作を実行でき、オーバーロードに接続できます。

2. えーっと。 。 。最後に、栗をあげましょう:

class Foo{
        public function call($name,$arguments){

                print("你是想调用$name"."()方法吗? 额...不好意思呦,该方法不可访问!<br/>");
        }
}

$foo=new Foo;

$foo->doStuff();

$foo->doStuff1();

出力は

以上がPHP で __call() メソッドを使用する方法とオーバーロードの例の分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。