我似乎无法在 PHP 中扩展静态类。
PHP代码:
<?php
class InstanceModule {
public static $className = 'None';
public static function PrintClassName() {
echo self::$className . ' (' . __CLASS__ . ')<br />';
}
}
class A extends InstanceModule {
public static function Construct() {
self::$className = "A";
}
}
class B extends InstanceModule {
public static function Construct() {
self::$className = "B";
}
}
?>
我的调用代码,以及我的期望:
<?php
//PHP Version 5.3.14
A::PrintClassName(); //Expected 'None' - actual result: 'None'
B::PrintClassName(); //Expected 'None' - actual result: 'None'
A::Construct();
A::PrintClassName(); //Expected 'A' - actual result: 'A'
B::PrintClassName(); //Expected 'None' - actual result: 'A'
B::Construct();
A::PrintClassName(); //Expected 'A' - actual result: 'B'
B::PrintClassName(); //Expected 'B' - actual result: 'B'
A::Construct();
A::PrintClassName(); //Expected 'A' - actual result: 'A'
B::PrintClassName(); //Expected 'B' - actual result: 'A'
?>
实际完整输出:
None (InstanceModule)
None (InstanceModule)
A (InstanceModule)
A (InstanceModule)
B (InstanceModule)
B (InstanceModule)
A (InstanceModule)
A (InstanceModule)
所以这里发生的事情(从看起来)是,一旦我设置self::$className
了任何一个扩展类,它就会覆盖另一个类的变量。我认为这是因为我使用静态类,并且只能有一个类,而InstanceModule
不是像我之前对. 我试过改用关键字,但似乎没有什么区别。A
B
extends
static::$className
如果有人能指导我正确的方向,我在这里做错了什么,以及如何解决这个问题,那就太好了。
编辑:澄清一下,这段代码做了我想要的,但显然是一个可怕的解决方法,因为它会破坏扩展和重用函数的整个想法:
<?php
class A {
public static $className = 'None';
public static function PrintClassName() {
echo self::$className . ' (' . __CLASS__ . ')<br />';
}
public static function Construct() {
self::$className = "A";
}
}
class B {
public static $className = 'None';
public static function PrintClassName() {
echo self::$className . ' (' . __CLASS__ . ')<br />';
}
public static function Construct() {
self::$className = "B";
}
}
?>