在 PHP 中,我们有不同的面向对象编程概念,如类、对象、封装、多态性等。重载也是PHP中OOP的一个概念。函数重载或方法重载是一种允许创建多个同名方法的功能,这些方法的输入参数类型各不相同。它简单地定义为一个函数执行不同任务的能力。
一行中重载的定义:“名称相同,但实现不同。”
广告 该类别中的热门课程 PHP 开发人员 - 专业化 | 8 门课程系列 | 3次模拟测试开始您的免费软件开发课程
网络开发、编程语言、软件测试及其他
众所周知,方法重载是在函数上执行的。因此,可以根据传递给每个函数的参数使用不同的实现来重载函数。例如,要求圆的面积,如果给定半径,则为 pi *r *r;要求正方形的面积,如果给定边长,则为 side * side,则三角形的面积为 (底边) * 高度) / 2 提供基础长度并给出高度等等。
重载概念需要 Magic 方法。
魔术方法以 __(双下划线)开头,并由 PHP 自动调用。此外,它们总是在类内部定义,而不是在类外部定义。不同的魔术方法是 __get()、__set、__construct()、__destruct()、__call()、__callStatic()、__isset()、__unset()、
重载在执行时会动态创建属性和方法,它们统称为实体。
实体也称为
让我们看看魔术方法如何使用 __call() 方法来工作
<?php class Test{ private $a = array('one','two','three'); public function__call($method, $args) { print "Method $method called:\n"; echo "<pre class="brush:php;toolbar:false">"; print_r($args); return $this->a; } } $obj = new Test(); $a = obj->anyMethod(1, 2, 3); var_dump($a); ?>
在上面的例子中,我们声明了一个名为 Test 的类,它具有私有属性和 __call 方法。两个参数传递给 __call 方法。在 __call 方法中,我们使用了 print() 语句、var_dump 参数和返回值 x。
然后创建名为 obj 的类的对象,并使用该对象调用一个未定义的方法,因为该方法不存在,而是调用 __call() 。
PHP中有两种类型的重载,让我们详细了解每种类型。
属性重载会在设置对象时创建动态属性。该属性与类实例相关联,如果该属性未在类的范围内声明,则被视为重载属性。为此,您无需编写任何额外的代码。下面的魔法方法告诉我们更多关于同样的事情。
下面提到的是使用重载属性执行的操作
Setter 和 Getter 重载属性(使用 __set() 和 __get())
评估重载属性设置(使用 __isset())
撤消此类属性设置(使用 __unset())
让我们了解一下这些方法的用途
__set() =>;用于初始化重载属性。
__get() =>;用于获取已经初始化的属性
__isset() =>;用于检查属性是否设置
__unset() =>;用于取消设置属性。
__call() =>;用于初始化重载方法
__callStatic() =>; 用于初始化静态方法
以下示例中将使用以上所有方法。
代码:
class PropertyOverloading { public $details = array(); //declaring private property private $j=20; // setter operation public function __set($name, $value) { echo "<br />". " In the Setting operation. Set '$name = $value'"; $this->details[$name] = $value; } // getter operation public function __get($name) { echo "<br />". " In the Getting Operation. Get '$name = '"; return $this->details[$name] . ' <br /> '; } // isset operation public function __isset($name) { echo "<br />". " In the isset Operation. isset '$name' ?"; return isset($this->details[$name]); } // unset operation public function __unset($name) { echo "<br />". " In the unset Operation. unset '$name' "; unset($this->details[$name]); } // returning private property value public function getPrivateProperty() { return "<br />". " j = ".$this->j; } } // creating object of class PropertyOverloading // setter and getter methods are called $obj = new PropertyOverloading(); $obj->x = 10; echo $obj->x; //call isset method var_dump(isset($obj->x)); //call unset method unset($obj->x); //check whether object x is unset or not var_dump(isset($obj->x)); //getting method to access the private property echo "<br />". $obj-> getPrivateProperty(); //calling directly the private property // throws error echo "<br />accessing the private property, throws error"; echo "<br />".$obj->j;
代码:
输出
与属性重载一样,方法重载创建一个在类范围之外声明的动态方法。这可以通过 __call() 和 __callStatic() 魔术方法实现。它们分别基于对象引用和静态引用来使用。
__call() ->用于调用对象引用中的重载方法
__callStatic() ->用于调用静态引用中的重载方法
以下示例将帮助您了解更多信息。
<?php class MethodOverloading { public function __call($name,$param){ echo "--With object reference <br/>"; } public static function __callStatic($name,$param){ echo "-----With static reference <br/>"; } } // creating object of class MethodOverloading $obj = new MethodOverloading; echo "Method Overloading <br/>"; // using the object reference $obj->DemoTest(); // using the static reference MethodOverloading::DemoTest(); ?>
代码:
输出:
1) 公共访问说明符用于重载方法。
2) 使用重载过程,其中未在类范围内定义的属性或方法可以在创建类的对象时访问。
3) 魔术方法用于重载属性或方法。在用于重载方法的两个魔术方法中,使用最多的是对象上下文中的 __call() 方法,较少使用的是静态上下文中使用的 __callStatic() 方法。
这是 PHP 重载指南。在这里,我们通过示例讨论 PHP 中重载的类型和概念。您也可以看看下面的文章来了解更多 –
以上是PHP 中的重载的详细内容。更多信息请关注PHP中文网其他相关文章!