📜  PHP的重载

📅  最后修改于: 2022-05-13 01:54:11.301000             🧑  作者: Mango

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