PHP的重载
什么是函数重载?
函数重载是创建多个具有不同实现的同名函数的能力。
PHP的函数重载?
PHP的函数重载用于动态创建属性和方法。这些动态实体由魔术方法处理,这些魔术方法可以在类中用于各种动作类型。函数重载包含相同的函数名,并且该函数根据参数的数量执行不同的任务。例如,找到给定半径的某些形状的面积,如果给定高度和宽度,则应返回圆的面积,然后应给出矩形的面积等。像其他 OOP 语言一样,函数重载无法通过本机方法完成。在PHP,函数重载是在魔术函数__call() 的帮助下完成的。这个函数接受函数名和参数。
PHP重载的属性和规则:
- 所有重载方法都必须定义为 Public。
- 在为类创建对象后,我们可以访问一组实体,这些实体是类范围内未定义的属性或方法。
- 此类实体称为重载的属性或方法,该过程称为重载。
- 为了处理这些重载的属性或函数,使用了PHP魔术方法。
- 除了在静态上下文中使用的 __callStatic() 方法之外,大多数魔术方法将在对象上下文中触发。
重载在PHP中的类型:有两种类型的PHP超载。
- 属性重载
- 方法重载
属性重载: PHP属性重载用于在对象上下文中创建动态属性。创建这些属性不需要单独的代码行。与类实例关联的属性,如果不在类的范围内声明,则视为重载属性。
以下操作是使用PHP的重载属性执行的。
- 设置和获取重载的属性。
- 评估重载的属性设置。
- 撤消此类属性设置。
在执行操作之前,我们应该定义适当的魔术方法。哪个是,
- __set():初始化重载属性时触发。
- __get():在PHP打印语句中使用重载属性时触发。
- __isset():当我们使用isset()函数检查重载的属性时会调用这个神奇的方法
- __unset():类似地,这个函数将在使用PHP unset() 的重载属性时调用。
例子:
data[$name] = $value;
}
// Function definition
public function __get($name) {
echo "Getting '$name: ";
if (array_key_exists($name, $this->data)) {
return $this->data[$name];
}
$trace = debug_backtrace();
return null;
}
// Function definition
public function __isset($name) {
echo "Is '$name' set?\n";
return isset($this->data[$name]);
}
// Definition of __unset function
public function __unset($name) {
echo "Unsetting '$name'\n";
unset($this->data[$name]);
}
// getHidden functino definition
public function getHidden() {
return $this->hidden;
}
}
// Create an object
$obj = new GFG;
// Set value 1 to the object variable
$obj->a = 1;
echo $obj->a . "\n";
// Use isset function to check
// 'a' is set or not
var_dump(isset($obj->a));
// Unset 'a'
unset($obj->a);
var_dump(isset($obj->a));
echo $obj->declared . "\n\n";
echo "Private property are visible inside the class ";
echo $obj->getHidden() . "\n\n";
echo "Private property are not visible outside of class\n";
echo $obj->hidden . "\n";
?>
输出:
Setting 'a' to '1'
Getting 'a: 1
Is 'a' set?
bool(true)
Unsetting 'a'
Is 'a' set?
bool(false)
1
Private property are visible inside the class 2
Private property are not visible outside of class
Getting 'hidden:
方法重载:这是一种重载,用于创建未在类范围内声明的动态方法。 PHP方法重载还会触发专用于适当目的的魔术方法。与属性重载不同, PHP方法重载允许在对象和静态上下文中调用函数。
相关的魔法函数是,
- __call() – 在对象上下文中调用重载方法时触发。
- __callStatic() – 在静态上下文中调用重载方法时触发。
例子:
runTest('in object context');
GFG::runTest('in static context');
?>
输出:
Calling object method 'runTest' in object context
Calling static method 'runTest' in static context