PHP new self什么,php new self()是什么意思

本文通过实例解析PHP中的newself()和newstatic()方法,阐述它们在类实例化中的作用和差异。newself()始终返回当前类的实例,而newstatic()则由调用者决定返回的类实例,这一区别在类继承中尤为明显。在没有继承的情况下,两者行为相同。通过对比不同继承场景下的输出,展示了newself()和newstatic()的实际应用和效果。
摘要由CSDN通过智能技术生成

php里new self() 一般在類內部使用,作用是對自身類實例化,搞不明白干嘛要弄這么個方法,弄個實例加深下大家對這個東東的理解

class test{

public function __construct(){

echo 'hello';

}

public function test2(){

new self();

}

}

test::test2();

這個實例會輸出hello

后邊發現還有個new static()方法,那這個跟new self()有什么區別呢,看代碼說話:

class fa {

public function getfa1() {

return new self();

}

public function getfa2() {

return new static();

}

}

$f = new fa();

print get_class($f->getfa1());

echo '

';

print get_class($f->getfa2());

get_class()方法是用於獲取實例所屬的類名

輸出:

fa

fa兩個輸出都一樣,感覺沒啥區別呀,后邊突發奇想繼承下再看看

class er1 extends fa {

}

class er2 extends fa {

}

$er1 = new er1();

$er2 = new er2();

print get_class($er1->getfa1());

echo '
';

print get_class($er1->getfa2());

echo '
';

print get_class($er2->getfa1());

echo '
';

print get_class($er2->getfa2());

輸出:

fa

er1

fa

er2

現在輸出不一樣了,明白new self()與new static()的區別了,只有在繼承中才能體現出來,如果沒有任何繼承,那么這兩者是沒有區別的,在繼承中new self()返回的實例是自己所在的那個類,不管誰調用都是不變的,new static()是由調用者決定的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值