| 
        php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login | 
 PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits             
             [2012-10-26 16:06 UTC] dagguh at gmail dot com
  [2013-01-08 23:42 UTC] jon at langevin dot me
  [2021-07-27 11:13 UTC] cmb@php.net
 
-Status: Open
+Status: Suspended
  [2021-07-27 11:13 UTC] cmb@php.net
  | 
    |||||||||||||||||||||||||||||||||||||
            
                 
                Copyright © 2001-2025 The PHP GroupAll rights reserved.  | 
        Last updated: Tue Nov 04 12:00:01 2025 UTC | 
Description: ------------ As we have "late static bindings" now, would it be reasonable to have a "abstract static property"? See the bellow example. abstract class A { //If this could be declared as abstract to make //the subclass have to redeclare it in order to //have it own $mTest to use. //If $mTest is not declared in one subclass, it would //change the $mTest of A which is shared by many //subclasses, some unexpected things would happen. //The design is to make each subclass have its own //$mTest to use and it has to be existed. //$mTest in A is just for a skeleton purpose, even should //not be assigned a value. static $mTest; static function setTest($value) { static::$mTest = $value; } static function DumpTest () { echo 'static:' . static::$mTest . "\n"; echo 'A-self:' . self::$mTest . "\n"; } } class B extends A { static function DumpTest () { parent::DumpTest(); echo 'B-self:' . self::$mTest . "\n"; echo 'B-parent:' . parent::$mTest . "\n"; } } class C extends A { static $mTest; static function DumpTest () { parent::DumpTest(); echo 'C-self:' . self::$mTest . "\n"; echo 'C-parent:' . parent::$mTest . "\n"; } } class D extends C { static $mTest; static function DumpTest () { parent::DumpTest(); echo 'D-self:' . self::$mTest . "\n"; echo 'D-parent:' . parent::$mTest . "\n"; } } B::setTest('test1');//This will change the $mStorages of class A B::DumpTest(); //static:test1 //A-self:test1 //B-self:test1 //B-parent:test1 C::setTest('test2'); C::DumpTest(); //static:test2 //A-self:test1 //C-self:test2 //C-parent:test1 D::setTest('test3'); D::DumpTest(); static:test3 //A-self:test1 //C-self:test2 //C-parent:test1 //D-self:test3 //D-parent:test2