Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 什么是OOPS中的函数重载和重写,请用外行术语解释_Php_Oop - Fatal编程技术网

Php 什么是OOPS中的函数重载和重写,请用外行术语解释

Php 什么是OOPS中的函数重载和重写,请用外行术语解释,php,oop,Php,Oop,事实上,我对OOPS的概念还不熟悉,很难理解,我也在某个地方读到“我们在PHP中没有重载”。我正在学习这个示例,但它没有让我明白 <?php class Toys{ private $str; public function __set($name,$value){ $this->str[$name] = $value; } public function __get($name){ echo "Overloaded

事实上,我对OOPS的概念还不熟悉,很难理解,我也在某个地方读到“我们在PHP中没有重载”。我正在学习这个示例,但它没有让我明白

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


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

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

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

重写只存在于OO中。重写是指在父类已经定义的类中定义方法。因此,您的类“重写”了已由父类定义的方法。

简单解释

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


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

本例中没有重载。对于基础知识,您是正确的。我不理解没有评论的否决票。。但首先,方法接受一个参数(执行),但它是由一个参数(定义)定义的。参数是参数给定的值。不要混淆两者。