我想知道这是否可能,我找不到办法,所以我问。如何在类的实例中获取变量的名称。
伪代码:
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
为什么!好吧,我只是想知道它的可能性。
答案 0 :(得分:7)
我不知道为什么,但是你走了。
<?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
答案 1 :(得分:3)
我创建此代码试图回答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();
答案 2 :(得分:0)
我找不到合理的理由。
无论如何,你可以做的一种方法(但是我认为它没有用)这是通过将实例名称作为构造函数的参数传递,如下所示:
$my_instance = new test("my_instance");