new self() 和 new static() 的区别_Yee Jason的博客-CSDN博客_new static


本站和网页 https://blog.csdn.net/qq_38287952/article/details/82669217 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

new self() 和 new static() 的区别_Yee Jason的博客-CSDN博客_new static
new self() 和 new static() 的区别
Yee Jason
于 2018-09-12 21:59:48 发布
9792
收藏
分类专栏:
php笔记
php笔记
专栏收录该内容
40 篇文章
0 订阅
订阅专栏
1、new static()是在php5.3版本引入的新特性
2、无论是 new static 还是 new self() 都是 new 一个对象
3、这两个方法new 出来的对象 有什么区别呢?说白了就是new出来的到底是同一个类的实列还是不同类的实列
为了探究上面的问题、我们先上一段简单的代码
  
class Father
public function getNewFather()
return new self();
public function getNewCaller()
return new static();
$f = new Father();
var_dump(get_class($f->getNewFather())); // Father
var_dump(get_class($f->getNewCaller())); // Father
这里无论是getNewFather还是getNewCaller都是返回的 Father 这个实列
到这里貌似 new self() 还是 new static() 是没有区别的 我们接着走
class Sun1 extends Father
$sun1 = new Sun1();
var_dump($sun1->getNewFather()); // object(Father)#4 (0) { }
var_dump($sun1->getNewCaller()); // object(Sun1)#4 (0) { }
这里我们发现了 getNewFather 返回的是Father的实列,
而getNewCaller 返回的是调用者的实列
现在明白了 new self() 和 new static 的区别了
他们的区别只有在继承中才能体现出来、如果没有任何继承、那么二者没有任何区别
然后 new self() 返回的实列是不会变的,无论谁去调用,都返回的一个类的实列,
而 new static则是由调用者决定的。
Yee Jason
关注
关注
点赞
收藏
评论
new self() 和 new static() 的区别
1、new static()是在php5.3版本引入的新特性2、无论是 new static 还是 new self() 都是 new 一个对象3、这两个方法new 出来的对象 有什么区别呢?说白了就是new出来的到底是同一个类的实列还是不同类的实列 为了探究上面的问题、我们先上一段简单的代码  class Father{ public function getNew...
复制链接
扫一扫
专栏目录
PHP中new static()与new self()的区别异同分析
12-18
本文实例讲述了PHP中new static()与new self()的区别异同,相信对于大家学习PHP程序设计能够带来一定的帮助。
问题的起因是本地搭建一个站。发现用PHP 5.2 搭建不起来,站PHP代码里面有很多5.3以上的部分,要求更改在5.2下能运行。
改着改着发现了一个地方
return new static($val);
这尼玛是神马,只见过
return new self($val);
于是上网查了下,他们两个的区别。
self – 就是这个类,是代码段里面的这个类。
static – PHP 5.3加进来的只得是当前这个类,有点像$this的意思,从堆内存中提取出来,访
PHP中的new self() VS new static()区别
最新发布
hello PHP的博客
09-28
44
PHP中的new self() 和 new static()
参与评论
您还未登录,请先
登录
后发表或查看评论
对比 PHP 中 new static() 与 new self()
lvshuocool的博客
06-23
389
通过new static()与new self()都能产生实例对象,new static()是在PHP5.3版本中引入的新特性,本文对二者稍作对比。
一、当直接通过本类创建实例时
class Test
public static function getIns()
$obj1 = new self();
$obj2 = new static();
return [$obj1, $obj2];
$arr = Test
new self()和new static()的区别
weixin_42625218的博客
06-08
183
new static()是在PHP5.3版本中引入的新特性。
无论是new static()还是new self(),都是new了一个新的对象。
这两个方法new出来的对象有什么区别呢,说白了就是new出来的到底是同一个类实例还是不同的类实例呢?
为了探究上面的问题,我们先上一段简单的代码:
class Father {
public function getNewFather() {
return new self();
public fun..
new static和new self
m0_46631321的博客
02-20
253
前几天看见一段代码出现了new self(),没看懂什么意思,于是百度了下。
文章目录一、new static()和new self()?二、self与this
一、new static()和new self()?
两者都是实例化自身,区别在于继承。如果没有继承,则两者返回的实例都是属于一个类;如果有继承,子类调用该方法,new self 仍然返回原类的实例,而 new static 返回实际子类的实例。这就是延迟静态绑定,static 的值,使用的是最后实际调用那个方法的类。
<?php
//示
new static 和 new self的区别
li2314的专栏
09-01
185
new static new self 都是实例化当前类, 但是new static只有代码所在的类,就是子类如果没有重写的话那么实例化的就是父类。 而new self就是严格的当前类
二、static::
static关键字可以实现以下功能:
1 调用类的静态方法 有后期静态绑定效果;
2 调用类的静态属性 有后期静态绑定效果;
3 调用类的非静态方法 没有后期静...
PHP中new self()和new static()的区别
qdtravelsky的博客
04-08
280
当我们定义一个类,并且在类的不同方法中分别实现new self()和new static();我们实例化该类并使用get_class()分别调用两个方法后会发现返回的都是该类的实例。
特殊情况
当我们在新创建的两个不同类中分别继承了上面的类,然后实例化这两个类,再使用get_class()分别调用上面类的两个方法后发现,使用new self()方法的类返回的是上面类的实例,而使用new static()方法返回的是调用类的实例。
...
关于new self 和 new static的区别
猛犸象
06-25
517
关于new self 和 new static的区别
在类的定义中实例化自己的三种方式:
class test{
function info(){
$my1 = new self;
$my2 = new static;
$my3 = new test;
其中
new self 和 new test 是一样的,得到的对象永远都是 test类的实例
new stat...
php new static,PHP new static 和 new self详解
weixin_33836042的博客
03-10
173
最近在一个视频的评论被问到一个小问题:这里选择用static 而不是self有特殊的考虑么?或者我们可以这样转换一下问题:PHP 的 new static 和 new self 具体有什么?其实这个来看一个例子应该就很清晰了:class Father {public static function getSelf() {return new self();}public static functi...
new static 跟 new self 区别
景山编程-顺道编程
11-15
880
<?php
/**
* Created by PhpStorm.
* User: 27394
* Date: 2016/11/15
* Time: 8:35
*/
class A{
public static function __contruct(){
echo __CLASS__."A";
public static function ini
php中的new static和new self
huang_cheng_zhi的博客
11-12
100
前段时间封装了一个类库:部分代码如下
class A
private function __construct(){}
public static function instance($args)
if(!(self::$instance of self))
//do something with args
self::$instance = new self();
return instance ;
class B extends a
php中 new self()和new static() 区别
dj1540225203的博客
05-12
143
曾几何时,看着顺眼就用,没有思考过里面的差异,后面有个产景使用到了才思考了起来,用不好问题很严重的!
参考:new self() 和 new static() 的区别_Yee Jason的博客-CSDN博客_new static
他们的区别只有在继承中才能体现出来、如果没有任何继承、那么二者没有任何区别;
然后 new self() 返回的实列是不会变的,无论谁去调用,都返回的一个类的实列,
而 new static则是由调用者决定的。
如果一个项目中,要求根据不同商户获取其唯一的配置实例,而你又不
PHP的self::与static::,new self()和new static()之分
u011533352的专栏
06-03
966
//后期静态绑定
class A {
public static function who() {
var_dump("I'm A");
public static function test() {
self::who();
public static function staticT() {
static::who();
new self() 与new static()的区别
简单-生活
07-25
406
self - 就是这个类,是代码段里面的这个类。
static - PHP 5.3加进来的只得是当前这个类,有点像$this的意思,从堆内存中提取出来,访问的是当前实例化的那个类,那么 static 代表的就是那个类。下面代码一运行什么都清楚了:class A {
public static function get_self() {
return new self();
} p
PHP new static 和 new self详解
bujidexinq的专栏
02-29
167
使用 self:: 或者CLASS对当前类的静态引用,取决于定义当前方法所在的类:使用 static:: 不再被解析为定义当前方法所在的类,而是在实际运行时计算的。也可以称之为“静态绑定”,因为它可以用于(但不限于)静态方法的调用。
最近在一个视频的评论被问到一个小问题:这里选择用static 而不是self有特殊的考虑么?或者我们可以这样转换一下问题:
PHP 的 new static ...
PHP中new static()与new self()的区别
SakuraLLj的专栏
06-15
2840
PHP中new static()与new self()的区别self:始终指向self代码所在类的本身,无论这个类被继承了多少次,self都指向最初使用self的类;
static:指向使用static的类,只有通过继承后,才能体现出static存在的意义,否则static和self一样。class A {
public function getStatic(){
re
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
©️2022 CSDN
皮肤主题:技术工厂
设计师:CSDN官方博客
返回首页
Yee Jason
CSDN认证博客专家
CSDN认证企业博客
码龄6年
暂无认证
130
原创
3万+
周排名
130万+
总排名
51万+
访问
等级
5116
积分
57
粉丝
80
获赞
44
评论
212
收藏
私信
关注
热门文章
Mac权限问题,operation not permitted
58411
SQLSTATE[HY000] [2002] Connection refused
33208
mac 下安装brew
24500
没有killall命令的解决方法 -bash: killall: command not found
19193
mysql 字段类型保存小数和整数
19104
分类专栏
网络编程
7篇
redis
3篇
php扩展学习
1篇
c语言
1篇
shell
3篇
php (Modern)笔记
3篇
php7底层实现
4篇
tp5框架源码分析
9篇
thinkphp
25篇
php笔记
40篇
php应用
28篇
工作中遇到的问题
42篇
linux
14篇
mysql
6篇
laravel
6篇
vue
22篇
swoole
3篇
最新评论
Tcp为什么是4次挥手呢?为什么是3次握手,不能是3次挥手呢?
冷山集:
如果是三次的话,服务器在发送消息完毕后,不能确定客户端是否收到了最后的这些消息,TCP是可靠传输,所以为了可靠一定需要一次客户端确认一次。
a 标签中如何设置其宽度和高度
chao3150:
[code=html]
<a style="width: 1px;display: block;" href="/">chaochaochaochao</a>
[/code]
宽度依然不变,这是为什么
linux 下安装 ncurses
Marc-Chan:
我的也是,使用了configure --without-cxx才成功编译,但是想问,这个会不会影响vim关于c++的高亮显示?
安装php (openssl)扩展
如梦江月:
cmd执行为什么找不到指定的路径
Mac将本地文件上传到服务器上
Mrceel:
报错本地没有这个文件或文件夹是为啥? 明明是有这个文件的
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
redis (跳跃表)
redis字符串(sds)
使用 swoole (websocket)的一些经验和坑
2020年12篇
2019年62篇
2018年64篇
2017年25篇
目录
目录
分类专栏
网络编程
7篇
redis
3篇
php扩展学习
1篇
c语言
1篇
shell
3篇
php (Modern)笔记
3篇
php7底层实现
4篇
tp5框架源码分析
9篇
thinkphp
25篇
php笔记
40篇
php应用
28篇
工作中遇到的问题
42篇
linux
14篇
mysql
6篇
laravel
6篇
vue
22篇
swoole
3篇
目录
评论
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值