使PHP对象根据变量名称执行不同的操作

时间:2009-05-18 00:19:10

标签: php class

例如,假设我有一个用户数据库。我有一个类,从数据库中获取有关这些用户的信息。

我想让课程“自我意识”它自己的名字,如下:

<?php

class UserData {

//[code that fetches the ID number from the variable name, and queries the database for info]

}

$user24 = new UserData;
echo 'Welcome, '.$user24->name.'!';

?>

理想情况下,此代码会输出类似“欢迎,Bob!”的内容,并会根据我的命名而改变。这可能吗?

3 个答案:

答案 0 :(得分:6)

由于给定对象可能有多个名称,因此在现代编程语言中这不是通常有效的技术。例如,假设用户25具有与用户24不同的名称,您希望以下代码打印什么?

$user24 = new UserData;
echo 'Welcome, '.$user24->name.'!';
$user25 = $user24;
echo 'Welcome, '.$user25->name.'!';

不仅如此,你还可以拥有没有名字的物品:

echo 'Welcome, '.(new UserData)->name.'!';

更典型的实现会让对象构造函数接受一个参数,告诉它你正在处理哪个用户,如下所示:

$user = new UserData(24);
echo 'Welcome, '.$user->name.'!';

答案 1 :(得分:3)

即使有可能(我不这么认为),你也不应该这样做。其他人只会看到很多魔法并且很难调试。尽可能坚持标准和已知的想法/模式。

您为什么不想使用:

$user = new UserData(24);

甚至更好(因为你不应该在构造函数中做任何阻塞操作):

$user = UserData::getById(24);

答案 2 :(得分:1)

值(例如对象)与其变量名的关系是一对多的 - 也就是说,一个值可能有多个名称,其中每个名称都是对相同值的引用。它甚至可能根本没有名称,即它可以是一个表达式(例如,一个新表达式返回一个对象)。因此,无法以编程方式找到值的“名称”。值可以有多个名称,也可以没有名称。