个人随笔
技术改变世界

PHP 重载方法:__call

php
使用__call()重载方法,双下划线是PHP中的内置函数,而__call()方法就是用来做方法的重载用的。

方法的重载在许多面向对象编程语言中都是常见的,但是在PHP中却不是非常有用,因为我们习惯使用灵活的类型和(容易实现的)可选的函数参数。

要使用该方法,必须实现__call()方法,如下例所示:

<?php
    public function _call($method, $p)
    {
        if($method != "display")
            return;

        if(is_object($p[0])){
            $this->displayObject($p[0]);
        }else if (is_array($p[0])){
            $this->displayArray($p[0]);
        }else{
            $this->displayScalar($p[0]);
        }
    }
?>

__call()方法必须带有两个参数。第一个包含了被调用的方法名称,而第二个参数包含了传递给该方法的参数数组。我们可以决定调用哪一个方法。在这种情况下,如果一个对象传递给 display() 方法,可以调用 displayObject() 方法;如果传递的是一个数组,可以调用 displayArray() ;如果传递的是其它内容,可以调用 DisplayScalar() 方法。

要调用以上这段代码,首先必须实例化包含这个__call()方法(命名为重载)的类,然后再调用 display() 方法,如下例代码所示:

<?php
    $ov = new overload;
    $ov->display(array(1, 2, 3));
    $ov->display('cat');
?>

第一个display()方法的调用将调用displayArray()方法,而第二个将矫勇displayScalar()方法。

请注意,要使以上代码能够使用,不用实现任何display()方法。

转载请注明出处王旭博客 » PHP 重载方法:__call

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址