我对标题描述的内容存在误解,我想知道是否还有另一种方法可以实现我在那寻找的东西。我有一个抽象类,它声明了一个没有值的静态属性,并且我从中实例化了定义该静态属性值的子类。基类还根据第一个属性定义了另一个静态属性值,但是问题是子类正在丢失其他子类中定义的最后一个属性的第一个属性值,然后该第二个属性从父类中获取错误的值。
此代码比我解释的要好:
abstract class A
{
protected static $name;
protected static $path;
public function __construct()
{
static::$path = static::$name."Path";
}
public function getPath()
{
return static::$path;
}
}
class B extends A
{
protected static $name = "B";
}
class C extends A
{
protected static $name = "C";
}
$b = new B();
$c = new C();
echo $b->getPath();
我希望回显显示“ Bpath”,但不幸的是它显示“ CPath”。如果我评论实例化C类的那一行,那么打印效果很好。
编辑:问题是如果我执行此代码:
abstract class A
{
protected static $name;
protected static $path;
public function __construct()
{
static::$path = static::$name."Path";
}
public function getPath()
{
return static::$path;
}
public function getName()
{
return static::$name;
}
}
class B extends A
{
protected static $name = "B";
}
class C extends A
{
protected static $name = "C";
}
$b = new B();
$c = new C();
echo $b->getName();
打印的名称是“ B”,很好。因此,即使使用static ::关键字,在子类属性中重新定义值的事实也不会具有在构造函数中进行赋值的结果。
我对标题描述的内容存在误解,我想知道是否还有另一种方法可以实现我在那寻找的东西。我有一个声明静态属性的抽象类...
静态属性$path
仅在类A
上定义一次。在任何地方设置static::$path
总是会设置A::$path
,因此该值在所有类之间共享。