PHP__获取重载代码的良好实践

PHP__获取重载代码的良好实践,php,oop,Php,Oop,作为一个好的实践,我的所有重载u u get函数是否应该像下面的示例一样,并包含调试代码 public function __get($name) { echo "Getting '$name'\n"; if (array_key_exists($name, $this->data)) { return $this->data[$name]; } /*question specific code from here on*/

作为一个好的实践,我的所有重载u u get函数是否应该像下面的示例一样,并包含调试代码

public function __get($name)
{
    echo "Getting '$name'\n";
    if (array_key_exists($name, $this->data)) {
        return $this->data[$name];
    }

    /*question specific code from here on*/

    $trace = debug_backtrace();
    trigger_error(
        'Undefined property via __get(): ' . $name .
        ' in ' . $trace[0]['file'] .
        ' on line ' . $trace[0]['line'],
        E_USER_NOTICE);
    return null;
}

如果在每一个类I重载中都包含它,那么它可能最终会成为大量重复代码

我会抛出一个异常,而不是执行
debug\u backtrace()
trigger\u error()


不过这是一种情境。如果密钥不存在,您可能希望完全执行其他操作。

我将抛出一个异常,而不是执行
debug\u backtrace()
trigger\u error()

不过这是一种情境。如果密钥不存在,您可能希望完全执行其他操作。

在这种情况下没有“良好实践”

根据对象的预期行为(仅取决于任务),您可以:

  • 触发通知/警告(如您的示例所示)
  • 抛出异常
  • 返回
    null
    (或某些其他预定义值)
  • 在这种情况下没有“良好做法”

    根据对象的预期行为(仅取决于任务),您可以:

  • 触发通知/警告(如您的示例所示)
  • 抛出异常
  • 返回
    null
    (或某些其他预定义值)

  • 否。此示例将获取成员变量并将其存储在数组成员变量中。你不应该到处超载。你应该把它放在父类中,让它被继承


    此外,触发错误的输出是老派的。创建一个新的异常类并将其抛出,例如PropertyNotFoundException。

    否。此示例采用成员变量并将其存储在数组成员变量中。你不应该到处超载。你应该把它放在父类中,让它被继承


    此外,触发错误的输出是老派的。创建一个新的异常类并将其抛出,例如PropertyNotFoundException。

    您可以将最终使用的任何异常处理打包到一个全局实用程序函数中,这会有点枯燥。您还可以使用AOP库将此功能注入到现有类中。

    您可以将最终使用的任何异常处理封装到一个全局实用程序函数中,这将有点枯燥。您还可以使用AOP库将此功能注入到现有类中。

    否。您的重载get函数根本不需要像此示例那样

    嗯,避免这些神奇的功能是个好主意。它们看起来很吸引人,但使用这种“魔力”会导致代码难以维护。至少,这是我的经历

    我今天“遵循”的“原则”之一是开设“IDE友好”课程。我的意思是:如果我使用的是EclipsePDT,并且
    $variable
    属于给定的类,那么自动完成应该显示以满足所有可用的方法和属性。使用这些神奇的方法,我们永远无法知道什么是可用的


    这只是一个一般性的建议,可能不适用于您的具体情况。

    不。您的重载get函数根本不需要与此示例类似

    嗯,避免这些神奇的功能是个好主意。它们看起来很吸引人,但使用这种“魔力”会导致代码难以维护。至少,这是我的经历

    我今天“遵循”的“原则”之一是开设“IDE友好”课程。我的意思是:如果我使用的是EclipsePDT,并且
    $variable
    属于给定的类,那么自动完成应该显示以满足所有可用的方法和属性。使用这些神奇的方法,我们永远无法知道什么是可用的


    这只是一个一般性的建议,可能不适用于您的具体情况。

    您考虑过继承或静态帮助器类吗?您考虑过继承或静态帮助器类吗?