检索新对象内的变量名称

时间:2012-03-15 05:25:13

标签: php variables object

class Foo {
   private $_id;
   public function __construct (){
     $this->_id = /*requesting variable name*/;
   }
}
$bar = NEW Foo();

我正在设置$ bar-> _id等于'bar'

4 个答案:

答案 0 :(得分:1)

class Foo {

   private $_id;

   public function __construct($id) {
     $this->_id = $id;
   }

}

$bar = new Foo('bar');

没有其他明智的方法可以做到这一点。

对象是对象。它与分配给它的变量没有关系。您无法获取对象在对象内分配的变量的名称。考虑一个对象可能根本没有分配给变量,或者它可能同时分配给多个变量,或者它所分配的变量可能会改变。

答案 1 :(得分:1)

除了解析调用脚本的行的PHP代码之外,您无法获取分配对象的变量名称。虽然可能,但这是邪恶和困难的,不值得做。

考虑$bar = new Foo();执行以下操作:

  1. 创建新的Foo;和
  2. 将对它的引用分配给$bar
  3. 您可以考虑按顺序发生的那些步骤 - 也就是说,当Foo的构造函数正在运行时,您甚至不知道会发生什么发生在您正在创建的Foo上。 从长远来看,这是一件好事。想象一下,如果每个函数都改变了它的行为方式,具体取决于它的调用方式和位置。可测性本身就是一场噩梦。

    简短版:不要打扰。毫无疑问,做你想做的事情的方式就不那么邪恶了。这样做的方式取决于你实际上试图解决的问题。

答案 2 :(得分:0)

如果想要实例化具有任意属性的对象,则可以执行

public function __construct(array $properties)
{
    foreach($properties as $property => $value) {
        $this->$property = $value
    }
}
$foo = new Foo(array('prop1' => 1, 'prop2' => 2));

根据需要添加变体。例如,将检查添加到property_exists以仅允许设置已定义的成员。我发现在设计缺陷的对象上抛出随机属性。

答案 3 :(得分:0)

您只需在构造函数中设置值,但您需要在对象外部获取此值。由于构造函数不返回值,请使用getter解决方案。

class Foo {

    private $_id;

    public function __construct() {

        $this->_id = 'Foo';

    }

    public function getId() {
        // Because $_id is class member, you can access it like this:
        return $this->_id;

    }

}

$bar = NEW Foo();

echo $bar->getId();