在PHP中有条件地定义函数是否有任何优势?例如,如果我有一个类似于此
的脚本function abc() {
...
}
function xyz() {
...
}
if (user_is_logged_in()) {
...
abc();
...
xyz();
}
else echo 'Not logged in.';
将这些函数定义移到if
语句中是否有任何优势,并且是否合法?我对PHP的后端了解不多,但似乎服务器可能需要做很多定义函数的工作,然后永远不要使用它们。
答案 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
)来完成前者,以允许插件替换它们。