Constants are not overridden as varibles

今天发现我写的一个底层的 Magento class 竟然有个低级错误。错误的根源是我在父类里定义了一个常量

const XML_PATH_TO_SYSTEM_CONFIG = 'some value';

然后在父类里有个方法用到了这个常量

public static function getConfigValue()
{
	return Mage::getStoreConfig(self::XML_PATH_TO_SYSTEM_CONFIG);
}

然后在子类里复写了常量

const XML_PATH_TO_SYSTEM_CONFIG = 'some other value';

但子类并没有父类的方法 getConfigValue()。我指望通过复写每个子类的常量后调用子类的方法 getConfigValue() 得到不同的值,哪知道每次都得到跟父类的方法 getConfigValue() 相同的值。

仔细一想,这是因为父类的 self::XML_PATH_TO_SYSTEM_CONFIG 并没有被复写。改用一个变量来存储值就能达到我的原定目的,但这个变量不能是静态变量,否则效果还是跟常量一样。

Leave a comment

Your email address will not be published. Required fields are marked *