例如,假设我有一个用户数据库。我有一个类,从数据库中获取有关这些用户的信息。
我想让课程“自我意识”它自己的名字,如下:
<?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!”的内容,并会根据我的命名而改变。这可能吗?
答案 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)
值(例如对象)与其变量名的关系是一对多的 - 也就是说,一个值可能有多个名称,其中每个名称都是对相同值的引用。它甚至可能根本没有名称,即它可以是一个表达式(例如,一个新表达式返回一个对象)。因此,无法以编程方式找到值的“名称”。值可以有多个名称,也可以没有名称。