有条理地定义功能

时间:2009-09-28 15:48:49

标签: php optimization function

在PHP中有条件地定义函数是否有任何优势?例如,如果我有一个类似于此

的脚本
function abc() {
    ...
    }

function xyz() {
    ...
    }

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

将这些函数定义移到if语句中是否有任何优势,并且是否合法?我对PHP的后端了解不多,但似乎服务器可能需要做很多定义函数的工作,然后永远不要使用它们。

5 个答案:

答案 0 :(得分:4)

我不会担心“服务器有很多工作要做”,定义了很多功能。很可能,这不会成为您申请中的瓶颈。

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

或者,您可以使用类方法和对象来使代码更清晰,更易于理解。如果您了解OO,那将是最佳选择。

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:2)

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

不要担心PHP中定义的从未使用过的函数。相反,请努力优化实际达到的功能。当然,避免在20个函数中复制几乎完全相同的代码......但这是任何语言中给出的。

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

条件定义不应用作优化,但可与function_exists结合使用以提供替代实施,或在扩展不可用时创建后备。 Wordpress使用许多函数(例如wp_hash_password)来完成前者,以允许插件替换它们。