class Foo {
private $_id;
public function __construct (){
$this->_id = /*requesting variable name*/;
}
}
$bar = NEW Foo();
我正在设置$ bar-> _id等于'bar'
答案 0 :(得分:1)
class Foo {
private $_id;
public function __construct($id) {
$this->_id = $id;
}
}
$bar = new Foo('bar');
没有其他明智的方法可以做到这一点。
对象是对象。它与分配给它的变量没有关系。您无法获取对象在对象内分配的变量的名称。考虑一个对象可能根本没有分配给变量,或者它可能同时分配给多个变量,或者它所分配的变量可能会改变。
答案 1 :(得分:1)
除了解析调用脚本的行的PHP代码之外,您无法获取分配对象的变量名称。虽然可能,但这是邪恶和困难的,不值得做。
考虑$bar = new Foo();
执行以下操作:
Foo
;和$bar
。您可以考虑按顺序发生的那些步骤 - 也就是说,当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();