首頁  >  文章  >  後端開發  >  php的__call函數是屬於哪一類

php的__call函數是屬於哪一類

(*-*)浩
(*-*)浩原創
2019-10-09 11:54:202541瀏覽

php的__call() 函數是一個魔術函數,所謂PHP的魔術函數,簡單的說就是在PHP中具有特定名稱——都是用兩個下劃線開頭的,並且PHP解釋器會在運行到某一個時機的時候自動尋找並運行的方法。

php的__call函數是屬於哪一類

當我們調了一個不可以存取的成員方法時,__call魔術方法就會被呼叫.

不可以存取的成員方法的是指(1. 該成員方法不存在, 2. 成員方法是protected或 private)(建議學習:PHP視訊教學

我們就是希望,在類別的外部直接呼叫不可存取的成員方法(private , protected).

案例說明

<?php
    header(&#39;content-type:text/html;charset=utf-8&#39;);
    //__call魔术方法

     class Monk{
        public $name;
        protected $hobby;

        public function __construct($name, $hobby){
            $this->name = $name;
            $this->hobby = $hobby;
        }
        
        //输出该对象的信息
        public function showInfo(){
            
            echo &#39;<br> 名字是 &#39; . $this->name;
            foreach($this->hobby as $hobby){
                echo &#39;<br> 爱好有 &#39; . $hobby;
            }
        }

        //会做算术题, 保护的
        protected function getSum($num1, $num2){
            
            return $num1 + $num2;
        }

        //编写这个__call魔术方法, __call 魔术方法会接收到两个参数
        /*
            @param $method_name 就是函数名
            @param $parameters 就是参数,类型是array
        */
        public function __call($method_name, $parameters){
            
//            echo &#39;<br> method_name = &#39; . $method_name;
//            echo &#39;<br> $parameters <br>&#39;;
//            var_dump($parameters);
            
            //判断 $this 中是否有  $method_name 函数,有就返回true,否则返回false
            if(method_exists($this, $method_name)){

                return $this->$method_name($parameters[0], $parameters[1]);
            }else{
                return &#39;没有你要调用的函数&#39;;
            }
            
        }
     }

     $monk = new Monk(&#39;济公&#39;, array(&#39;no1&#39;=>&#39;腾云驾雾&#39;, &#39;no2&#39;=>&#39;喝酒&#39;));

     $monk->showInfo();

     //当我们直接调用 protected 方法时,就会触发 __call 魔术方法
     echo &#39;<br> 结果是&#39; . $monk->getSum(100, 200);

以上是php的__call函數是屬於哪一類的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn