【问题标题】:Conditionally defining functions有条件地定义函数
【发布时间】:2010-12-02 01:09:53
【问题描述】:

在 PHP 中有条件地定义函数有什么好处吗?例如,如果我有一个类似这样的脚本

function abc() {
    ...
    }

function xyz() {
    ...
    }

if (user_is_logged_in()) {
    ...
    abc();
    ...
    xyz();
    }
else echo 'Not logged in.';

将这些函数定义移动到if 语句中会有什么好处,是否合法?我对 PHP 的后端了解不多,但似乎服务器可能需要做很多工作来定义函数,然后再让它们永远不会被使用。

【问题讨论】:

    标签: php optimization function


    【解决方案1】:

    条件定义不应用作优化,但可以与function_exists 结合使用,以提供替代实现或在扩展不可用时创建回退。 Wordpress 为前者提供了许多功能(例如wp_hash_password)以允许插件替换它们。

    【讨论】:

      【解决方案2】:

      我很快就学会了不要在解析之前优化 PHP,就像在让 gcc 深入研究之前优化 C 一样。

      不用担心 PHP 中定义的从未使用过的函数。相反,将精力放在优化实际达到的功能上。当然,请避免在 20 个功能几乎相同的函数中重复代码……但这是任何语言的规定。

      【讨论】:

        【解决方案3】:

        我认为,但可能是错误的,您需要调整语法以创建匿名函数,例如:

        <?php
        if(a) {
        abc = function {
        function stuff
        }
        } else if (b) {
        xyz = function {
        function stuff
        }
        }
        ?>
        

        【讨论】:

          【解决方案4】:

          我不会担心“服务器有很多工作要做”来定义很多功能。这很可能不会成为您的应用程序的瓶颈。

          我建议不要使用 PHP 或任何语言来设计条件函数定义。相反,您可以在函数中定义逻辑。例如,在 abc() 函数中,您可以提供 if/else 逻辑来检查用户是否已登录。

          或者,您可以使用类方法和对象来使您的代码更简洁、更易于理解。如果您了解 OO,那将是正确的选择。

          【讨论】:

          • 将 OO 用于大项目,但对于该项目的某些组件,它只会让我慢下来,因为代码不会在其他任何地方重用。不过,感谢您的回答。
          【解决方案5】:

          这绝对是合法的,但我建议不要这样做,因为它会大大降低课程代码的可读性/可维护性。

          改为使用操作码缓存(如 APC),这将减少服务器的负载。

          Drupal 开发人员针对不同的操作码缓存做了一个基准测试,也比较了没有操作码缓存的 PHP,您可以在http://2bits.com/articles/benchmarking-drupal-with-php-op-code-caches-apc-eaccelerator-and-xcache-compared.html查看结果

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-11-06
            • 2012-05-05
            • 1970-01-01
            • 2013-09-13
            • 2019-07-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多