【问题标题】:PHP get variable's name of class instance?PHP获取类实例的变量名称?
【发布时间】:2012-03-18 19:08:20
【问题描述】:

我是 PHP 新手,所以这个问题似乎很愚蠢,但假设我将变量 ABC 赋值为 XYZ 类的新对象,那么我如何在 XYZ 的类定义中获得名称“ABC”?

$ABC = new XYZ;
$ABC->echoInstanceName(); //--I wish this line could echo out : ABC

将实例分配给数组的元素时这是否更容易?

$ABC = array('myElem'=>new XYZ);
$ABC['myElem']->echoInstanceName(); //--I wish this line could echo out : ABC

感谢所有建议!


更多信息:我正在做一件事情:建立一个动物系统。

从 nativeAnimal 类开始并扩展到 Monkey、Elephant、Fish...等。在运行时,我创建了一个 2 层数组,每个数组的元素都是 Monkey、Elephant 或 Fish 类型的实例...

我想要数组的键是动物的名字。在猴子类中,我想要一个函数来呼应猴子的名字。当然,我可以以某种方式将数组的键传递给实例,但我想避免输入两次。 (当我只更改一个名称时,这可能会导致稍后出现错误)

这不可能吗?或者你能建议一个更好的模式吗?谢谢!

【问题讨论】:

  • 通常不可能这样做。为什么你(认为你)需要这个?

标签: php class instance


【解决方案1】:

你不能这样做。如果您想将 ABC 值传递给 XYZ 类,请在构造函数中使用额外的参数:

$ABC = new XYZ('ABC');

没有其他方法可以通知类它被分配到的变量。

例如XYZ类:

class XYZ {
  protected $name;
  public __construct($name) {
    $this->name = $name;
  }

  public echoInstanceName() {
    echo $name;
  }

  public getName() {
    return $this->name;
  }
}

【讨论】:

  • 好吧,你可以做一些debug_backtraceing 和内省和黑客攻击......但真的没有理由这样做,所以 +1。 :)
  • 我刚刚添加了一些信息,请看看您是否可以提出其他建议。谢谢!
  • 在我看来,您可以将动物的名称传递给构造函数并跳过数组键。然后您可以使用 foreach 并在动物对象上调用方法 getName()
猜你喜欢
  • 1970-01-01
  • 2014-06-15
  • 1970-01-01
  • 2011-01-06
  • 1970-01-01
  • 2011-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多