【问题标题】:what is function overloading and overriding in OOPS, explain in layman terms [duplicate]什么是 OOPS 中的函数重载和覆盖,用外行术语解释 [重复]
【发布时间】:2016-09-26 10:06:19
【问题描述】:

实际上,我是 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 oop


【解决方案1】:

Method Overriding

Method Overloading

简单说明

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

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

【讨论】:

    【解决方案2】:

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

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

    覆盖仅存在于 OO 中。覆盖是指在一个类中定义一个父类已经定义的方法。因此,您的类“覆盖”了父级已经定义的方法。

    【讨论】:

    • 对于基础知识,您是正确的。我不明白没有 cmets 的否决票 .. 但首先一个方法接受一个参数(执行),但它是由一个参数定义的(定义)。参数是给定参数的值。不要混淆两者。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2011-03-01
      • 2011-04-19
      • 1970-01-01
      • 2012-11-10
      • 2014-06-30
      • 2012-01-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多