php new self()是什么意思

php里new self() 一般在类内部使用,作用是对自身类实例化,搞不明白干嘛要弄这么个方法,弄个实例加深下大家对这个东东的理解

  <?php
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 '<p>';
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 '<br>';
print get_class($er1->getfa2());
echo '<br>';
print get_class($er2->getfa1());
echo '<br>';
print get_class($er2->getfa2());

输出:

fa
er1
fa
er2

现在输出不一样了,明白new self()与new static()的区别了,只有在继承中才能体现出来,如果没有任何继承,那么这两者是没有区别的,在继承中new self()返回的实例是自己所在的那个类,不管谁调用都是不变的,new static()是由调用者决定的

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值