2010-08-09 64 views
0

由于PHP 5.3中的继承问题,导致static关键字出现问题。PHP 5.3中的后期静态在继承时不会产生预期结果

abstract class Object 
{ 
    protected static $_classDataSource = null; 

    public static function getDataSource() 
    { 
     return static::$_classDataSource; 
    } 

    public static function setDataSource($dataSource) 
    { 
     static::$_classDataSource = $dataSource; 
    } 
} 

class Film extends Object 
{ 

} 

class Actor extends Object 
{ 

} 
Film::setDataSource('FFF'); 
Actor::setDataSource('aaa'); 
echo Film::getDataSource(); 
echo Actor::getDataSource(); 

结果是: AAAAAA 预期的结果: FFFaaa

我应该怎么做,使之如预期?

+0

[PHP5&Abstract Classes。单独的每个子类的类变量副本?](http://stackoverflow.com/questions/3391788/php5-abstract-classes-separate-copy-of-class-variables-for-each-child-class) – Artefacto 2010-08-09 17:58:00

+0

请参阅也http://stackoverflow.com/questions/3187124/peculiar-behaviour-with-php-5-3-static-inheritance-and-references – Artefacto 2010-08-09 18:00:36

回答

2

您需要重新声明子类中的静态变量或手动中断参考集。请参阅this answer

0

我知道这不是在技术上回答你确切的问题,但我必须问:为什么?如果您需要配置(例如设置数据源),在大多数情况下,最好使用实例...