Мне интересно, возможно ли это, и я не мог найти способ сделать это, поэтому я спрашиваю. Как я могу получить имя переменной, в которой присутствует экземпляр класса.
Псевдокод:
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 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
Я создал этот код, пытаясь ответить за то, как получить имя переменной инициализатора внутри класса в 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();
Я не могу найти повод для этого.
В любом случае, один из способов, которым вы можете это сделать (но опять же это бесполезно, насколько я могу себе представить), это, передав имя экземпляра в качестве параметра конструктора, например:
$my_instance = new test("my_instance");