如果我有这样的代码:
class Person {
$age;
$height;
$more_stuff_about_the_person;
function about() {
return /* Can I get the person's name? */;
}
}
$John = new Person();
$Peter = new Person();
print $John->about(); // Print "John".
print $Peter->about(); // Print "Peter".
是否可以从方法中打印存储为变量名称的人名?
由于这不是标准程序,我猜这是个坏主意。
我查了一下,我找不到任何相关内容。
答案 0 :(得分:20)
没有。对象可以有多个名称,也可以没有名称。会发生什么:
$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
)。
答案 1 :(得分:3)
Eje211,你试图以非常奇怪的方式使用变量。变量只是数据持有者。您的应用程序永远不应关心变量的名称,而应关注其中包含的值。
实现这一目标的标准方法 - 如已经提到的那样,是给Person类一个'name'属性。
只是为了重新迭代,不要依赖变量名来确定应用程序的输出/功能。
答案 2 :(得分:0)
用户定义的变量名称应被视为对PHP编译器(或任何编译器)完全透明。您创建的对象只是对指向真实对象的内存的引用。他们的名字毫无意义。姓名是人的一员。
但是,您可以使用get_defined_vars()
获取所需的变量foreach (get_defined_vars() as $key => $val) {
if ($val instanceof Person) {
echo $key;
}
}
但是,绝对不应该这样做,并且对象仍然需要知道变量的存储顺序。不知道你将如何计算。
答案 3 :(得分:0)
此示例可能会有所帮助,目前没有方法告诉您必须自己指定的对象名称,如下面的代码所示:
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');