搜索

首页  >  问答  >  正文

php - 谁能讲一下__call的用法呢?

__call只有两个参数吗?这个代码里面为什么传了好几个参数呢 这个怎么处理呢?
我看有人这么说 __call 第一个参数$m 就是你要调用的方法 test. 这句话我都理解不了 第一个参数不是1吗?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

<code><?php

class Caller

{

    private $x = array(1, 2, 3);

 

    public function __call($m, $a)

    {

        print "Method $m called:n";

        var_dump($a);

        return $this->x;

    }

}

 

$foo = new Caller();

$a = $foo->test(1, "2", 3.4, true);

var_dump($a);

?></code>

巴扎黑巴扎黑2903 天前363

全部回复(3)我来回复

  • 阿神

    阿神2017-04-10 16:55:19

    __call是调用未定义的方法时调用的。

    也就是说,你的test方法未定义,那么test这个方法名就会作为__call的第一个参数传入,而test的参数会被装进数组中作为__call的第二个参数传入。

    所以当你调用$foo->test(1, "2", 3.4, true)时,实际是相当于调用$foo->__call('test', array(1, "2", 3.4, true))

    回复
    0
  • 巴扎黑

    巴扎黑2017-04-10 16:55:19

    __call方法在调用类的方法时触发,比如:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    <code><?php

    class google{

        public function search(){

            //TODO

        }

        public function __call($method, $parameters){

            //这里的method便是对应的方法,即"->"后面的字符串,$parameters是通过这个方法传过来的参数

        }

    }

     

    $google = new google();

    $keyword = 'VR';

    $google->search($keyword);

    //当调用当前对象不存在的方法时,会转向__call

    $google->operate();</code>

    利用__call可以做些封装,从而调用其它对象和方法。
    附官方参考:PHP魔术方法

    回复
    0
  • 黄舟

    黄舟2017-04-10 16:55:19

    第一个参数就是你调用的不存在的方法的函数名,第二个就是你调用的不存在的方法时传的一对参数

    回复
    0
  • 取消回复