【问题标题】:Set a Static Member of a dynamically 'found' class设置动态“找到”类的静态成员
【发布时间】:2012-05-16 15:56:58
【问题描述】:

通过在获取当前类的类型后引用它们,尝试设置一个数组和一个计数,它们都是静态成员。目的是拥有我已加载的特定类型的所有项目的全局列表,但我希望将它们拆分为每个特定类的静态属性。问题是我将从基类继承一些类,但我希望将“子”类中的静态属性附加到。

这就是我的目标,给予或接受:

$Class = get_class($this);
($Class)::$List[($Class)::$Count++] = $this;

【问题讨论】:

  • 请注意,SO 是一个问答网站,而不是论坛。答案应与问题分开发布。此外,您的代码不会向 VolkerK 的功能添加任何内容。您不需要静态 $Count 变量,因为分配给 empty brackets ($List[] = $this) 会附加到数组。此外,您不需要重写构造函数来调用父构造函数。

标签: php class inheritance properties static


【解决方案1】:

在 PHP 5.3 及更高版本中,您可以使用 late static binding 访问被覆盖的静态变量。简短的版本是在访问静态变量时使用static 而不是self 或类名。例如:

<?php
abstract class A {
    public function __construct() {
        static::$List[] = $this;
    }
}

class B extends A { 
    public static $List = array();
}

class C extends A {
    public static $List = array();  
}
$b = new B();
$c1 = new C();
$c2 = new C();
$c3 = new C();

echo '#objects of class C: ', count(C::$List), "\n";
var_dump(C::$List);

请记住,如果子类定义了构造函数,则它必须显式调用父类的构造函数。

【讨论】:

  • 已经考虑和考虑;如果这可行,非常感谢。
  • 美丽。非常感谢先生。
  • 我会保留 $Count 变量并使用 $List[] 和 count($List),但这可能是一个选择问题...
  • 否则B类似乎会从类... C中获得一个独立的列表,假设C与B相同?
  • “使用我编辑的代码,如果我创建一个与B类相同的C类,它们会有独立的列表”是真的吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-09
  • 2012-04-13
  • 2018-10-05
  • 1970-01-01
  • 1970-01-01
  • 2018-11-30
  • 1970-01-01
相关资源
最近更新 更多