浅谈PHP中new self()和new static()的区别
浅谈PHP中new self()与new static()的差异之旅
本文将为大家介绍PHP中两个重要的关键字:new self()和new static(),同时分享它们之间的区别。这两个关键字在PHP中扮演着重要的角色,尤其是在面向对象编程中。希望读者能够更好地理解这两个关键字的区别和使用场景。
一、概述
在PHP中,new self()和new static()都是用于创建新的对象实例的关键字。它们在大多数情况下看起来非常相似,但在特定的上下文中,它们的行为会有所不同。接下来,我们将通过一些示例代码来详细解释它们的区别。
二、代码示例
1. 类定义
我们定义一个名为Father的基类,其中包含两个方法:getNewFather()和getNewCaller()。这两个方法分别使用new self()和new static()来创建新的对象实例。
```php
class Father {
public function getNewFather() {
return new self(); // 创建当前类的实例
}
public function getNewCaller() {
return new static(); // 创建调用者的实例
}
}
```
2. 子类定义与实例化
接下来,我们定义两个继承自Father类的子类:Sun1和Sun2。然后,我们分别创建这两个子类的实例,并调用父类中的方法。
```php
class Sun1 extends Father { }
class Sun2 extends Father { }
$sun1 = new Sun1();
$sun2 = new Sun2();
```
3. 调用方法并输出结果
我们调用$sun1和$sun2对象中的方法,并打印返回对象的类名。通过输出结果,我们可以观察到new self()和new static()之间的区别。
```php
print get_class($sun1->getNewFather()); // 输出 "Father"
print get_class($sun1->getNewCaller()); // 输出 "Sun1"
print get_class($sun2->getNewFather()); // 输出 "Father" (同上)
print get_class($sun2->getNewCaller()); // 输出 "Sun2" (同上) 这里的输出表明,使用new self()创建的对象实例始终是基类(Father)的实例,而使用new static()创建的对象实例则是调用者的实例(Sun1或Sun2)。它们的区别在于创建的对象实例所属的类不同。在继承关系中,new self()始终返回基类的实例,而new static()则返回调用者的实例。这使得它们在特定的上下文中表现出不同的行为。通过本文的介绍和示例代码,读者可以更好地理解PHP中new self()和new static()的区别和使用场景。希望这对读者有所帮助,如果有任何不当之处,欢迎指正。也希望大家多多支持我们的博客或网站。本文介绍了PHP中new self()和new static()的区别及使用场景。通过代码示例,展示了它们在继承关系中的行为差异。希望读者能够更好地理解这两个关键字,并在实际编程中应用它们。也欢迎大家多多支持我们的博客或网站,共同学习进步。
编程语言
- 浅谈PHP中new self()和new static()的区别
- jquery仿ps颜色拾取功能
- .Net Core 下使用ZKWeb.System.Drawing实现验证码功能(图
- js实现文字向上轮播功能
- PHPTree——php快速生成无限级分类
- Laravel框架中扩展函数、扩展自定义类的方法
- ASP获取ACCESS数据库表名及结构的代码
- 支持IE,firefxo,chrome浏览器下鼠标拖动和拖拽的鼠标
- JS实现移动端触屏拖拽功能
- 微信小程序 获取相册照片实例详解
- Vue中封装input组件的实例详解
- JS更改select内option属性的方法
- 一个封装的Ajax类
- PHP中16个高危函数整理
- JS实现简单的键盘打字的效果
- MYSQL替换时间(年月日)字段时分秒不变实例解析