static 和new php,php中new static和new self的区别

在读Yii2的代码的时候看到的他用了个new static,之前没有用过,所以写了一点代码试了下。差异应该在于new self是实例化当前代码所在类。new static是调用的的那个类,就下面这个例子来说,MyTest继承了Test类, 那么当在MyTest中使用static的时候,这个static代表的就是MyTest,self代表的就是Test。

class Test {

private $_user;

protected function __construct($user) {

$this->_user = $user;

}

public function showUser(){

echo "{$this->_user}\n";

}

public static function of($user) {

return new static($user);

}

}

class MyTest extends Test{

protected function __construct($user) {

parent::__construct("from MyTest: '.$user);

}

}

class Test2 {

private $_user;

protected function __construct($user) {

$this->_user = $user;

}

public function showUser(){

echo "{$this->_user}\n";

}

public static function of($user) {

return new self($user);

}

}

class MyTest2 extends Test2{

protected function __construct($user) {

parent::__construct('from MyTest: '.$user);

}

}

MyTest::of("hello world")->showUser();

MyTest2::of("hello world")->showUser();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值