【问题标题】:Make PHP Object do different actions depending on variable name使 PHP 对象根据变量名执行不同的操作
【发布时间】:2009-05-18 00:19:10
【问题描述】:

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

我想让班级“自我意识”它自己的名字,像这样:

<?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.'!';

?>

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

【问题讨论】:

    标签: php class


    【解决方案1】:

    由于给定的对象可能有多个名称,因此这不是现代编程语言中普遍有效的技术。例如,假设用户 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.'!';
    

    【讨论】:

      【解决方案2】:

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

      你为什么不想使用:

      $user = new UserData(24);
      

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

      $user = UserData::getById(24);
      

      【讨论】:

      • 谢谢,我不知道你可以像这样将参数传递给 __construct() 函数。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2014-08-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-04
        • 2016-10-07
        • 2011-08-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多