Php 检索新对象内部的变量名
我正在尝试将$bar->\u id设置为'bar'Php 检索新对象内部的变量名,php,variables,object,Php,Variables,Object,我正在尝试将$bar->\u id设置为'bar' class Foo { private $_id; public function __construct (){ $this->_id = /*requesting variable name*/; } } $bar = NEW Foo(); 没有其他明智的方法可以做到这一点 对象就是对象。它与分配给它的变量没有关系。无法获取对象内部已分配给该对象的变量的名称。考虑一个对象可能根本不被赋值给一个变量,或者它
class Foo {
private $_id;
public function __construct (){
$this->_id = /*requesting variable name*/;
}
}
$bar = NEW Foo();
没有其他明智的方法可以做到这一点
对象就是对象。它与分配给它的变量没有关系。无法获取对象内部已分配给该对象的变量的名称。考虑一个对象可能根本不被赋值给一个变量,或者它可以同时分配给多个变量,或者它被分配的变量可能会改变。 < P>如果这个想法是实例化具有任意属性的对象,那么你可以做< /P>
class Foo {
private $_id;
public function __construct($id) {
$this->_id = $id;
}
}
$bar = new Foo('bar');
添加您认为合适的变体。例如,将检查添加到属性_exists以仅允许设置已定义的成员。我发现向对象抛出随机属性是一个设计缺陷。除了解析调用脚本的行的PHP代码之外,您无法获取对象被分配到的变量名。虽然可能,但这是邪恶和困难的,不值得去做 考虑一下,
$bar=newfoo()代码>执行以下操作:
创建一个新的Foo
;及
将对它的引用指定给$bar
你可以按照这个顺序考虑这些步骤——也就是说,当Foo
的构造函数运行时,你甚至不知道你正在创建的Foo
会发生什么。从长远来看,这是一件好事。想象一下,如果每个函数都根据调用的方式和位置而改变其行为方式。可测试性本身就是一场噩梦
简短版本:不用麻烦了。毫无疑问,做你想做的事有一种不那么邪恶的方式。这种方式将是什么,取决于您实际试图通过这样做来解决的问题。您只需在构造函数中设置值,但需要在对象外部获取该值。由于构造函数不返回值,请使用getter解决方案
public function __construct(array $properties)
{
foreach($properties as $property => $value) {
$this->$property = $value
}
}
$foo = new Foo(array('prop1' => 1, 'prop2' => 2));
1.请编辑您的帖子,使其看起来像一个问题。2.由于$\u id是私有的,您无法直接访问它。使用getter方法返回$\u id的值。类构造正在访问$\u id。不能直接访问它。您只需在构造函数中设置值,但需要在对象外部获取此值。由于构造函数不返回值,请使用前面提到的解决方案……不要再挑剔一个例子了。对不起,你是什么意思?
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();