Может ли экземпляр объекта PHP узнать его имя?
Если у меня есть такой код:
class Person {
$age;
$height;
$more_stuff_about_the_person;
function about() {
return /* Can I get the person name? */;
}
}
$John = new Person();
$Peter = new Person();
print $John->about(); // Print "John".
print $Peter->about(); // Print "Peter".
Возможно ли напечатать имя человека, сохраненное как имя переменной, из метода?
Как это не стандартная процедура, я предполагаю, что это плохая идея.
Я просмотрел его, и я ничего не могу найти об этом.
Ответы
Ответ 1
Нет. Объекты могут иметь несколько имен или имена. Что будет здесь:
$John = new Person();
$Richie = $John; // $John and $Richie now both refer to the same object.
print $Richie->about();
или здесь:
function f($person)
{
print $person->about();
}
f(new Person());
Если объекты должны знать свои собственные имена, тогда они должны явно хранить свои имена в качестве переменных-членов (например, $age
и $height
).
Ответ 2
Eje211, вы пытаетесь использовать переменные очень причудливыми способами. Переменные - это просто держатели данных. Ваше приложение никогда не должно заботиться о имени переменных, а о значениях, содержащихся в них.
Стандартный способ выполнить это - как уже упоминалось, - дать классу Person свойство 'name'.
Просто для повторной итерации, не полагайтесь на имена переменных, чтобы определить выход/функциональность вашего приложения.
Ответ 3
Определяемые пользователем имена переменных должны рассматриваться как полностью прозрачные для компилятора PHP (или любого компилятора, если на то пошло). Объекты, которые вы создаете, - это просто ссылки на память, которые указывают на реальный объект. Их имя не имеет никакого значения. Имя является членом человека.
Однако вы можете получить нужные переменные с помощью get_defined_vars()
foreach (get_defined_vars() as $key => $val) {
if ($val instanceof Person) {
echo $key;
}
}
Однако этого не следует делать, и объект все равно должен знать порядок хранения переменных. Не знаю, как вы это вычислили.
Ответ 4
Этот пример может быть полезен, в настоящее время нет метода, который сообщает вам имя объекта, которое вы должны указать себе, как в приведенном ниже коде:
class Person {
public $age=0;
public $height=0;
public $objPerson='';
function about($objPerson,$age,$height) {
return
'Person Object Name: '.$objPerson.'<br>'.
'Age: '.$age.'<br>'.
'height: '.$height.'ft<br><hr>';
}
}
$John = new Person();
$Peter = new Person();
print $John->about('John',25,'5.5');
print $Peter->about('Peter',34,'6.0');