2009-09-28 3 views
2

Есть ли какое-либо преимущество для условного определения функций в PHP? Например, если у меня есть сценарий, подобный этомуУсловные определяющие функции

function abc() { 
    ... 
    } 

function xyz() { 
    ... 
    } 

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

Будет ли какое-то преимущество, и это было бы законным, чтобы переместить эти определения функций внутри if заявления? Я мало знаю о конце PHP, но похоже, что серверу, возможно, придется много работать над определением функций, а затем никогда их не использовать.

ответ

4

Я бы не беспокоиться о «сервер, имеющий много работы для do "с определением множества функций. По всей вероятности, это не будет узким местом в вашем приложении.

Я бы посоветовал разработать условное определение функции в PHP или на любом языке. Скорее, вы можете определить логику внутри функции. Например, в функции abc() вы можете указать логику if/else, которая проверяет, вошел ли пользователь в систему.

В качестве альтернативы вы можете использовать методы и объекты класса, чтобы сделать ваш код более понятным и понятным для понимания , Если вы поймете ОО, это будет путь.

+0

Использование OO для больших вещей, но для некоторых компонентов этого проекта это просто замедляет меня, поскольку код не используется повторно нигде. Спасибо за ответ. –

2

Это определенно легально, но я бы рекомендовал против него, потому что это значительно снизит удобочитаемость/ремонтопригодность кода курса.

Вместо этого используйте кеш op-кода (например, APC), это уменьшит нагрузку на сервер.

Drupal разработчики сделали тест для различных оп кода кэшей, а также по сравнению PHP без кэша ОП-кода, Вы можете увидеть результаты на http://2bits.com/articles/benchmarking-drupal-with-php-op-code-caches-apc-eaccelerator-and-xcache-compared.html

+0

Я не являюсь владельцем сервера. –

1

я думаю, но может быть не так, что вам нужно будет настроить синтаксис для создания анонимных функций, например:

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

Примечание для будущих читателей: это только PHP 5.3+. –

2

я узнал очень быстро, чтобы не оптимизировать PHP перед разбором, как я бы оптимизировать С перед позволяя gcc копаться в нем.

Не беспокойтесь о функциях, определенных в PHP, которые никогда не используются. Скорее, приложите все усилия для оптимизации фактически достигнутых функций. Конечно, избегайте дублирования кода в 20 функциях, которые выполняют почти одно и то же ... но это данные на любом языке.

0

Условное определение не должно использоваться в качестве оптимизации, но может использоваться в сочетании с function_exists для обеспечения альтернативных реализаций или для создания откатов в случае, если расширение недоступно. Wordpress делает первое со многими функциями (например, wp_hash_password), чтобы позволить плагинам их заменять.

Смежные вопросы