Maison  >  Article  >  développement back-end  >  À quelle catégorie appartient la fonction __call de php ?

À quelle catégorie appartient la fonction __call de php ?

(*-*)浩
(*-*)浩original
2019-10-09 11:54:202541parcourir

La fonction __call() de PHP est une fonction magique. La fonction magique PHP signifie simplement qu'elle a un nom spécifique en PHP - tous commençant par deux traits de soulignement, et l'interpréteur PHP trouvera automatiquement une méthode. et s'exécute lorsqu'un certain timing est atteint.

À quelle catégorie appartient la fonction __call de php ?

Lorsque nous appelons une méthode membre inaccessible, la méthode magique __call sera appelée

Non La méthode membre accessible fait référence à. (1. La méthode membre n'existe pas, 2. La méthode membre est protégée ou privée) (Apprentissage recommandé : Tutoriel vidéo PHP)

Nous espérons juste que dans Appeler directement les méthodes membres inaccessibles (privé, protégé) de l'extérieur de la classe.

Description du cas

<?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);

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn