实际上我是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);
?>
答案 0 :(得分:1)
简单说明
方法覆盖是指超类或接口中定义的方法由其子类之一重新定义,从而修改/替换超类提供的行为。调用实现或其他实现的决定是在运行时动态获取的,具体取决于调用操作的对象。请注意,覆盖时方法的签名保持不变。
方法重载与多态无关。它指的是定义方法的不同形式(通常通过接收不同的参数数量或类型)。它可以看作是静态多态。调用实现或其他实现的决定是在编码时进行的。请注意,在这种情况下,方法的签名必须更改。
答案 1 :(得分:-1)
重载允许您编写具有相同名称但不同类型参数的函数。编译器根据参数的类型选择正确的函数作为编译时间。
PHP没有它,因为它没有静态类型(在编译时,类型是未知的)。
仅在OO中存在覆盖。覆盖是指在类中定义一个父类已经定义的方法。所以你的类'覆盖'已经由父级定义的方法。
答案 2 :(得分:-2)
参数是一个Object,因此您可以向此Object添加值。所以你不需要重载,因为你可以传递任意数量的值。