PHP对象实例可以知道它的名字吗?

时间:2010-10-07 12:26:14

标签: php oop

如果我有这样的代码:

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".

是否可以从方法中打印存储为变量名称的人名?

由于这不是标准程序,我猜这是个坏主意。

我查了一下,我找不到任何相关内容。

4 个答案:

答案 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'); 
相关问题