Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何强制派生类包含静态属性?_Php - Fatal编程技术网

Php 如何强制派生类包含静态属性?

Php 如何强制派生类包含静态属性?,php,Php,如何强制执行派生类应包含某些静态属性或值的规则 在这个例子中,我希望确保每个扩展父类的类都应该包含一个静态变量$foo abstract class Parent{ // Trying to enforce that all derived classes must contain a static $foo; static protected $foo; public function getFoo(){ return get_class($this)

如何强制执行派生类应包含某些静态属性或值的规则

在这个例子中,我希望确保每个扩展父类的类都应该包含一个静态变量$foo

abstract class Parent{
    // Trying to enforce that all derived classes must contain a static $foo;
    static protected $foo;

    public function getFoo(){
        return get_class($this)::$foo;
    }

}

class Child extends Parent{
     static protected $foo = 0;
}

您不能
抽象
类属性,但是在这种情况下,最好执行以下操作:

abstract class Parent{      
    abstract public function getFoo();
}

class Child extends Parent{
    private $foo = 0;

    public function getFoo(){
        return $this->foo;
    }
}

作为一个额外的提示,您需要知道将来您在哪里获得了类($this):$foo,这是不必要的,您可以只做
静态::$foo
,其工作原理相同。

您不能
抽象
类属性,但是在这种情况下,可能最好执行以下操作:

abstract class Parent{      
    abstract public function getFoo();
}

class Child extends Parent{
    private $foo = 0;

    public function getFoo(){
        return $this->foo;
    }
}

作为一个额外的提示,您需要知道将来您在哪里获得了课程($this):$foo,这是不必要的,您可以只做
静态::$foo
,这同样有效。

您不能。为什么不让它成为一个抽象的方法,让孩子们按照他们想要的方式来实现它,而不是将它限制为一个静态值呢?谢谢。与在每个子类中重新定义getFoo()方法相比,抽象类中只包含一个getFoo()方法的定义似乎更为简单。如果您要强制您的子类实现某些东西,那么强制他们实现静态属性还是方法就无关紧要了。您不能。为什么不让它成为一个抽象的方法,让孩子们按照他们想要的方式来实现它,而不是将它限制为一个静态值呢?谢谢。在抽象类中只包含一个getFoo()方法的定义似乎比在每个子类中重新定义它更简单。如果您要强制您的孩子实现某些东西,那么强制他们实现静态属性还是方法就无关紧要了。