首页  >  文章  >  后端开发  >  PHP 中的重载

PHP 中的重载

王林
王林原创
2024-08-29 12:56:56901浏览

在 PHP 中,我们有不同的面向对象编程概念,如类、对象、封装、多态性等。重载也是PHP中OOP的一个概念。函数重载或方法重载是一种允许创建多个同名方法的功能,这些方法的输入参数类型各不相同。它简单地定义为一个函数执行不同任务的能力。

一行中重载的定义:“名称相同,但实现不同。”

广告 该类别中的热门课程 PHP 开发人员 - 专业化 | 8 门课程系列 | 3次模拟测试

开始您的免费软件开发课程

网络开发、编程语言、软件测试及其他

重载在 PHP 中是如何工作的?

众所周知,方法重载是在函数上执行的。因此,可以根据传递给每个函数的参数使用不同的实现来重载函数。例如,要求圆的面积,如果给定半径,则为 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);
?>

PHP 中的重载

在上面的例子中,我们声明了一个名为 Test 的类,它具有私有属性和 __call 方法。两个参数传递给 __call 方法。在 __call 方法中,我们使用了 print() 语句、var_dump 参数和返回值 x。

然后创建名为 obj 的类的对象,并使用该对象调用一个未定义的方法,因为该方法不存在,而是调用 __call() 。

PHP 中的重载类型

PHP中有两种类型的重载,让我们详细了解每种类型。

  • 属性超载
  • 方法重载

1) 属性重载

属性重载会在设置对象时创建动态属性。该属性与类实例相关联,如果该属性未在类的范围内声明,则被视为重载属性。为此,您无需编写任何额外的代码。下面的魔法方法告诉我们更多关于同样的事情。

下面提到的是使用重载属性执行的操作

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;

代码:

PHP 中的重载

输出

PHP 中的重载

2) 方法重载

与属性重载一样,方法重载创建一个在类范围之外声明的动态方法。这可以通过 __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();
?>

代码:

PHP 中的重载

输出:

PHP 中的重载

规则

1) 公共访问说明符用于重载方法。

2) 使用重载过程,其中未在类范围内定义的属性或方法可以在创建类的对象时访问。

3) 魔术方法用于重载属性或方法。在用于重载方法的两个魔术方法中,使用最多的是对象上下文中的 __call() 方法,较少使用的是静态上下文中使用的 __callStatic() 方法。

推荐文章

这是 PHP 重载指南。在这里,我们通过示例讨论 PHP 中重载的类型和概念。您也可以看看下面的文章来了解更多 –

  1. 什么是 PHP 数组?
  2. C# 中的重载
  3. C++ 中的重载
  4. C# 中的重载和重写

以上是PHP 中的重载的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
上一篇:PHP POST Method下一篇:Types of Error in PHP