`

PHP 重载方法 __call()

    博客分类:
  • php
php 
阅读更多

PHP 重载方法 __call()
__call() 方法用于监视错误的方法调用。
__call()(Method overloading)
为了避免当调用的方法不存在时产生错误,可以使用 __call() 方法来避免。该方法在调用的方法不存在时会自动调用,程序仍会继续执行下去。
语法:
function __call(string $function_name, array $arguments)
{
    ......
}
该方法有两个参数,第一个参数 $function_name 会自动接收不存在的方法名,第二个 $args 则以数组的方式接收不存在方法的多个参数。
在类里面加入:
function __call($function_name, $args)
{
    echo "你所调用的函数:$function_name(参数:<br />";
    var_dump($args);
    echo ")不存在!";
}
当调用一个不存在的方法时(如 test() 方法):
$p1=new Person();
$p1->test(2,"test");
输出的结果如下:
你所调用的函数:test(参数:
array(2) {
    [0]=>int(2)
    [1]=>string(4) "test"
}
)不存在!



分享到:
评论

相关推荐

    php 使用 __call实现重载功能示例

    虽然PHP不支持真正的函数或方法重载,但是可以通过魔术方法(__call)来模拟这一特性。`__call`是PHP中的一个魔术方法,当尝试调用一个不存在的类方法时,会自动调用`__call`方法。这使得我们可以在类中动态地处理方法...

    PHP程序设计-3期(KC016) 3.8.1创建和使用类拓展知识:构造函数和析构函数.doc

    return call_user_func_array(array($this, $name), $args); } ``` 在`Person`类中,`__call()`方法被用来根据传入参数的个数判断调用哪个构造函数。通过`func_num_args()`获取参数个数,`func_get_args()`获取...

    PHP使用方法重载实现动态创建属性的get和set方法

    但是,可以在PHP的类中运用__call()方法来实现方法重载。当调用一个类中并不存在的方法时,会自动调用__call()方法,其形式为__call($name,$arguments) 其中$name是方法的名称,$arguments是一个数组类型的参数。 ...

    PHP程序设计-3期(KC016) 3.8.2 类的继承拓展知识.doc

    return call_user_func_array(array($this, $name), $arg); } public function __construct() { $num = func_num_args(); $args = func_get_args(); switch ($num) { case 0: $this-&gt;__call('__construct...

    PHP利用func_get_args和func_num_args函数实现函数重载实例

    首先,我们来看一个简单的例子,利用默认参数和`func_get_args()`及`call_user_func_array()`来实现函数重载: ```php function rewrite() { $args = func_get_args(); if (func_num_args() == 1) { func1($args...

    PHP 5.3新增魔术方法__invoke概述

    在使用这些魔术方法时,需要注意的是,为了保持代码的清晰和避免潜在的命名冲突,不建议使用双下划线开头的名称来命名自己定义的普通方法,除非是为了重载已有的魔术方法。这些魔术方法都是PHP语言内置定义的特殊...

    php面向对象的方法重载两种版本比较

    return call_user_func_array($method, $args); } else { throw new Exception("Method '$methodName' does not exist."); } } // 注册重载方法 function registerMethod($methodName, $callback) { $this-...

    PHP面向对象编程之深入理解方法重载与方法覆盖(多态)

    不过,PHP通过魔术方法__call()提供了一种间接实现方法重载的方式。当调用一个不存在的方法时,__call()方法会被自动调用,程序员可以在__call()方法中定义自己的逻辑来区分不同的方法调用情况。 __call()方法需要...

    PHP实现重载的常用方法实例详解

    在PHP中,尽管它是一种弱类型的语言,不像Java那样直接支持函数或方法的重载,但我们可以采用一些技巧来模拟重载的效果。这里我们将详细探讨四种常用的PHP实现重载的方法。 1. **弱类型和自动类型转换** PHP的弱...

    PHP面向对象程序设计模拟一般面向对象语言中的方法重载(overload)示例

    总结来说,虽然PHP本身不支持方法重载,但是可以通过`__call`魔术方法来模拟实现类似方法重载的效果。这为开发者提供了一定的灵活性来控制对象的行为,并且可以在不影响类的使用者的情况下,增加新功能或调整现有...

    PHP面向对象技术_全面讲解

    PHP 不直接支持方法重载,但可以通过魔术方法`__call()`模拟实现。 9. 静态成员(Static Members)属于类而不是类的实例,可以直接通过类名访问,不受对象实例的影响。 10. `final`关键字用于标记不能被继承的类或...

    php面向对象系列(完整)

    - 方法重载(Overloading):PHP不支持方法名的重载,但可以通过魔术方法`__call()`和`__callStatic()`实现类似效果。 - 方法重写(Override):子类可以覆盖父类的方法,实现不同的行为。 - 接口(Interface):...

    PHP实现的函数重载功能示例

    call_user_func_array(array($this, $f), $args); } } } function f1($a1) { echo "1个参数 " . $a1 . " "; } function f2($a1, $a2) { echo "2个参数 " . $a1 . "," . $a2 . " "; } function...

    php5 类与对象

    PHP 支持通过 `__call()` 方法实现重载。 ```php class MethodOverloading { public function __call($method, $args) { echo "Called method $method with arguments: "; print_r($args); } } $obj = new ...

    PHP_面向对象教程

    在PHP中,可以通过魔术方法`__call`来实现方法的动态调用。 #### 14. 访问类型 PHP中有三种访问类型:`public`、`protected`和`private`,分别表示公开、受保护和私有。 #### 15. 静态成员的使用 静态成员(变量...

    php常见的魔术方法详解

    php规定以两个下划线(__)开头的方法都保留为魔术方法,所以建议大家函数名最好不用__开头,除非是为了重载已有的魔术方法。  PHP中的魔术方法有 :__construct, __destruct , __call, __callStatic,__get, __set, ...

Global site tag (gtag.js) - Google Analytics