Php 处理重复方法调用的最佳实践是什么?

Php 处理重复方法调用的最佳实践是什么?,php,Php,假设我有一个要注册的类加载器 $loader = new ClassLoader; $loader->register(); 当第二次调用方法register()时,我应该: 抛出一个异常,声明类装入器已注册 默默地失败 返回布尔状态 如果我选择选项1,我还将提供一个isRegistered()方法,在第二次调用它之前提供一些检查机会 处理这种情况的最佳方法是什么 还有其他更好的选择吗?单例或类似单例的方法如何?我使用它来创建全局smarty对象: 在config.php中: $GLO

假设我有一个要注册的类加载器

$loader = new ClassLoader;

$loader->register();
当第二次调用方法
register()
时,我应该:

  • 抛出一个异常,声明类装入器已注册
  • 默默地失败
  • 返回布尔状态
  • 如果我选择选项1,我还将提供一个
    isRegistered()
    方法,在第二次调用它之前提供一些检查机会

    处理这种情况的最佳方法是什么


    还有其他更好的选择吗?

    单例或类似单例的方法如何?我使用它来创建全局smarty对象:

    在config.php中:

    $GLOBALS['config']['SmartyObj']     = 0;
    
    在您的utils.php(或您想使用的任何内容)中:


    其思想是,如果对象存在,则返回对该对象的相同引用。如果不是,您就创建它。

    单例或类似单例的方法如何?我使用它来创建全局smarty对象:

    在config.php中:

    $GLOBALS['config']['SmartyObj']     = 0;
    
    在您的utils.php(或您想使用的任何内容)中:


    其思想是,如果对象存在,则返回对该对象的相同引用。如果没有,则创建它。

    这取决于该方法正在执行的操作。在本例中,如果您正在加载一个类来访问静态方法,那么如果该类已经加载,我将默默地忽略该请求

    在这种情况下,无论之前是否加载了类,程序都将保持相同的状态(要么加载该类,要么什么也不做;尽管如此,仍将加载该类)

    如果它是一个具有实例方法/属性的类,那么您不会希望失败;相反,您需要创建一个新实例


    在这种情况下,当类已经注册时抛出异常只会给使用代码的开发人员带来麻烦。但是,如果您选择抛出异常,则必须提供isRegistered()方法,以便在加载类之前调用。不过,在这种情况下,我肯定会选择#2

    这取决于该方法的作用。在本例中,如果您正在加载一个类来访问静态方法,那么如果该类已经加载,我将默默地忽略该请求

    在这种情况下,无论之前是否加载了类,程序都将保持相同的状态(要么加载该类,要么什么也不做;尽管如此,仍将加载该类)

    如果它是一个具有实例方法/属性的类,那么您不会希望失败;相反,您需要创建一个新实例


    在这种情况下,当类已经注册时抛出异常只会给使用代码的开发人员带来麻烦。但是,如果您选择抛出异常,则必须提供isRegistered()方法,以便在加载类之前调用。不过,在这种情况下,我肯定会选择#2

    您是否考虑过触发警告或通知之类的事情

    trigger_error("ClassLoader already registered", E_USER_WARNING);
    

    与异常不同,触发错误是在不停止程序执行的情况下发现代码中的缺陷/中断的好方法。保留回溯跟踪并在错误日志中获取条目。如果这样的错误(注册一个类加载器两次)在生产中出现,您希望它对用户是透明的(这并不重要),但是程序员会得到通知。

    您是否考虑过触发警告或通知之类的事情

    trigger_error("ClassLoader already registered", E_USER_WARNING);
    
    与异常不同,触发错误是在不停止程序执行的情况下发现代码中的缺陷/中断的好方法。保留回溯跟踪并在错误日志中获取条目。如果这样的错误(注册一个类加载器两次)在生产中继续发生,您希望它对用户透明(这不是关键),但程序员会得到通知。

    以下是我的经验法则: 如果您正在开发一个其他人将基于其构建的应用程序,则触发错误(或者更好的是引发异常)是一种可以接受的方式,可以通知其他开发人员他们正在不必要地重新注册您的类。
    但是,如果代码只针对您或熟悉代码的一小群人,则触发错误似乎过于热心。除非调用register函数是处理器密集型的,否则我认为在register函数的开头快速检查返回false就可以了。

    以下是我的经验法则: 如果您正在开发一个其他人将基于其构建的应用程序,则触发错误(或者更好的是引发异常)是一种可以接受的方式,可以通知其他开发人员他们正在不必要地重新注册您的类。

    但是,如果代码只针对您或熟悉代码的一小群人,则触发错误似乎过于热心。除非调用register函数是处理器密集型的,否则我认为在register函数的开头快速检查返回false就可以了。

    我决定使用您的解决方案,因为它不会影响程序,但是确实为开发人员提供了一种发现问题的方法。我决定使用您的解决方案,因为它不会影响程序,但确实为开发人员提供了一种发现问题的方法。