PHP可以static ::代替self ::吗?

2020/11/09 02:21 · php ·  · 0评论

我对此事有点困惑。我正在设计一个ORM类,它的行为与ActiveRecord在ruby on rails中的行为非常相似,但这并不重要。

我要说的是,我的类广泛使用了静态属性继承,特别是用于数据库和表处理。我的问题是,我是否应该使用self ::?

您必须问自己:“我要使用适当的方法来解决问题吗?”

self::static::做两件事。例如self::或是__CLASS__对当前类的引用,因此在一定范围内进行定义将不足以满足对静态调用的需求。

继承会发生什么?

class A {
    public static function className(){
        echo __CLASS__;
    }

    public static function test(){
        self::className();
    }
}

class B extends A{
    public static function className(){
        echo __CLASS__;
    }
}

B::test();

这将打印

A

另一方面,static::它具有预期的行为

class A {
    public static function className(){
        echo __CLASS__;
    }

    public static function test(){
        static::className();
    }
}

class B extends A{
    public static function className(){
        echo __CLASS__;
    }
}


B::test();

这将打印

B

在PHP 5.3.0中,这称为后期静态绑定它解决了调用在运行时引用的类的限制

考虑到这一点,我认为您现在可以充分看到并解决问题了。如果您要继承几个静态成员,并且需要访问父成员和子成员,self::则将无法满足要求。

尝试使用下面的代码查看selfstatic之间的区别

<?php
class Parent_{
    protected static $x = "parent";
    public static function makeTest(){
        echo "self => ".self::$x."<br>";
        echo "static => ".static::$x;       
    }
}

class Child_ extends Parent_{
    protected static $x = "child";
}

echo "<h4>using the Parent_ class</h4>";
Parent_::makeTest();

echo "<br><h4>using the Child_ class</h4>";
Child_::makeTest();
?>

您会得到以下结果:

使用Parent_类

  • 自我=>父母
  • 静态=>父级

使用Child_类

  • 自我=>父母
  • 静态=>儿童
本文地址:http://php.askforanswer.com/phpkeyistatic-daitiself-ma.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!