【问题标题】:Get variable name of object inside the object php获取对象php中对象的变量名
【发布时间】:2013-10-08 18:43:19
【问题描述】:

我想知道这是否可能,但我找不到办法,所以我问。如何获取类实例中存在的变量的名称。

伪代码:

class test{

    public $my_var_name = '';

    function __construct(){

        //the object says: Humm I am wondering what's the variable name I am stored in?
        $this->my_var_name = get_varname_of_current_object();

    }

}

$instance1 = new test();
$instance2 = new test();
$boeh = new test();

echo $instance1->my_var_name . ' ';
echo $instance2->my_var_name . ' ';
echo $boeh->my_var_name . ' ';

输出如下:

instance1 instance2 boeh

为什么!好吧,我只是想知道它的可能。

【问题讨论】:

    标签: php oop object


    【解决方案1】:

    我不知道为什么,但是给你。

    <?php
    class Foo {
        public function getAssignedVariable() {
    
            $hash = function($object) {
                return spl_object_hash($object);
            };
    
            $self = $hash($this);
    
            foreach ($GLOBALS as $key => $value) {
                if ($value instanceof Foo && $self == $hash($value)) {
                    return $key;
                }
            }
        }
    }
    
    $a = new Foo;
    $b = new Foo;
    
    echo '$' . $a->getAssignedVariable(), PHP_EOL;  // $a
    echo '$' . $b->getAssignedVariable(), PHP_EOL;  // $b
    

    【讨论】:

    • 很好用,我可能从没用过,但至少你回答了这个问题。
    【解决方案2】:

    我创建了这段代码试图回答How to get name of a initializer variable inside a class in PHP

    但它已经关闭并引用了这个问题,

    只是另一个易于阅读的变体,我希望我没有破坏任何基本概念哦 php 开发:

    class Example
    {
       public function someMethod()
       {
    
        $vars = $GLOBALS;
        $vname = FALSE;
        $ref = &$this;
        foreach($vars as $key => $val) {
            if( ($val) === ($ref)) {
                $vname = $key;
                break;
            } 
        }
    
        return $vname;
       }
    
    }
    
    $abc= new Example;
    $def= new Example;
    echo $abc->someMethod(); 
    echo $def->someMethod();
    

    【讨论】:

      【解决方案3】:

      我找不到这样做的充分理由。

      无论如何,您可以做的一种方法(但就我所能想象的而言,它再次没有用)这是通过将实例名称作为构造函数的参数传递,如下所示:

      $my_instance = new test("my_instance");
      

      【讨论】:

        猜你喜欢
        • 2019-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多