php static 和self区别

Posted 雨落知音

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php static 和self区别相关的知识,希望对你有一定的参考价值。

static(关键字) 类似于 self(关键字) , 但它指向的是被调用的类(Document) 而不是包含类(DomainObject) , static 和 self 的区别:

<?php
class DomainObject{
    public static function createStatic(){
        return new static();        
    }
    public static function createSelf(){
        return new self();
    }
}

class User extends DomainObject{
    
}

class Document extends DomainObject{
    
}

echo ‘<pre>‘;
var_dump( Document::createStatic());
var_dump( Document::createSelf());
Result:
object(Document)[1]
object(DomainObject)[1]

以前你这么写:

abstract class DomainObject{

}

class User extends DomainObject{
    public static function create(){
        return new User();
    }
}

class Document extends DomainObject{
    public static function create(){
        return new Document();
    }
}

现在这么写

abstract class DomainObject{
    public static function create(){
        return new static();
    }
}

class User extends DomainObject{

}

class Document extends DomainObject{

}

好处: 可以节省大量重复代码~

以上是关于php static 和self区别的主要内容,如果未能解决你的问题,请参考以下文章

php 小知识随手记 new self() 和new static()作用和区别

PHP static 关键字和 self 关键字实例化的区别

PHP 中的 self::$bar 和 static::$bar 有啥区别?

PHP static 和 self的区别

PHP中new self()和new static()的区别探究

PHP $this,self,static 的区别