Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 检索新对象内部的变量名_Php_Variables_Object - Fatal编程技术网

Php 检索新对象内部的变量名

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(); 没有其他明智的方法可以做到这一点 对象就是对象。它与分配给它的变量没有关系。无法获取对象内部已分配给该对象的变量的名称。考虑一个对象可能根本不被赋值给一个变量,或者它

我正在尝试将$bar->\u id设置为'bar'

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();