【问题标题】:how to use an static var from child class in its parent class with an static method如何通过静态方法在其父类中使用来自子类的静态变量
【发布时间】:2013-05-08 12:42:19
【问题描述】:

我想获取子类中重新声明的静态变量的值:

    class A {

        private static $echo_var = 'PARENT_ECHO' ;

        public static function e() {
            return '$echo_var = ' . self::$echo_var ;
        }
    }

    class B extends A {

        private static $echo_var = 'CHILD_ECHO';
    }

    echo B::e();

我想获得 CHILD_ECHO。

谢谢, 莫滕曼

【问题讨论】:

    标签: php oop inheritance static static-binding


    【解决方案1】:

    访问时使用static关键字:

    return '$echo_var = ' . static::$echo_var ;
    

    它叫做late static binding。但它不适用于私人会员。您必须将其公开或受保护。私有属性只能在定义它们的类中访问。

    【讨论】:

    • 太棒了!非常感谢我知道后期静态绑定,但从未真正了解如何使用 static:: 。但它是如此简单:)
    【解决方案2】:

    有3个错误:

    • ECHO 是保留名称。
    • 使用protected 而不是private
    • 使用static 代替self
    class A
    {
    
        protected static $echo_var = 'PARENT_ECHO' ;
    
        public static function output()
        {
            return '$echo_var = ' . static::$echo_var ;
        }
    }
    
    class B extends A
    {
        protected static $echo_var = 'CHILD_ECHO';
    }
    
    echo B::output();
    

    【讨论】:

    • 为什么它看起来像它的 3ed 列表项?还是很奇怪
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 1970-01-01
    • 2019-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多