什么是OOPS中的函数重载和覆盖,用外行术语解释

时间:2016-09-26 10:06:19

标签: php oop

实际上我是OOPS概念的新手并且很难理解,而且我也在某处阅读了#34;我们没有在PHP中超载#34;。我正在研究这个例子,但它并没有让我在某处

<?php
class Toys{
    private $str;
    public function __set($name,$value){
        $this->str[$name] = $value;
    }

    public function __get($name){
        echo "Overloaded Property name = " . $this->str[$name] . "<br/>";
    }

    public function __isset($name){
        if(isset($this->str[$name])){
            echo "Property \$$name is set.<br/>";       
        } else {
            echo "Property \$$name is not set.<br/>";
        }
    }

    public function __unset($name){
        unset($this->str[$name]);
        echo "\$$name is unset <br/>";
    }
}

$objToys = new Toys;

/* setters and getters on dynamic properties */
$objToys->overloaded_property = "new";
echo $objToys->overloaded_property . "\n\n";
/*Operations with dynamic properties values*/

isset($objToys->overloaded_property);
unset($objToys->overloaded_property);
isset($objToys->overloaded_property);
?>

3 个答案:

答案 0 :(得分:1)

Method Overriding

Method Overloading

简单说明

方法覆盖是指超类或接口中定义的方法由其子类之一重新定义,从而修改/替换超类提供的行为。调用实现或其他实现的决定是在运行时动态获取的,具体取决于调用操作的对象。请注意,覆盖时方法的签名保持不变。

方法重载与多态无关。它指的是定义方法的不同形式(通常通过接收不同的参数数量或类型)。它可以看作是静态多态。调用实现或其他实现的决定是在编码时进行的。请注意,在这种情况下,方法的签名必须更改。

答案 1 :(得分:-1)

重载允许您编写具有相同名称但不同类型参数的函数。编译器根据参数的类型选择正确的函数作为编译时间。

PHP没有它,因为它没有静态类型(在编译时,类型是未知的)。

仅在OO中存在覆盖。覆盖是指在类中定义一个父类已经定义的方法。所以你的类'覆盖'已经由父级定义的方法。

答案 2 :(得分:-2)

参数是一个Object,因此您可以向此Object添加值。所以你不需要重载,因为你可以传递任意数量的值。