могу ли я поместить функцию в PHP внутри структуры if? как это:
<?php if(true){ function HelloWorld(){ echo "Hello World!!!"; } HelloWorld(); } ?>
потому что я пробовал и работает, но я не знаю, правильно это или нет. благодаря
Это совершенно легально – он просто определяет функцию внутри блока if. Тем не менее, именно поэтому вы хотели бы сделать это, это нечто загадочное.
Также стоит отметить, что эта функция будет доступна в глобальной области (то есть: вне блока if), так как …
Все функции и классы в PHP имеют глобальную область действия – их можно вызывать вне функции, даже если они были определены внутри и наоборот.
Дополнительную информацию см. В разделе « Руководство пользователя по функциям PHP».
Как говорит миддапарка , это совершенно легально, но с точки зрения его использования вы можете проверить, существует ли функция до объявления ее:
if (!function_exists("foo")) { function foo() { return "bar"; } }
function_exists
Это выглядит немного странно, но да, это законно
Начиная с PHP 5.3, если вам нужна функция с ограниченной областью (скажем, для обратного вызова), вы можете использовать анонимные функции / закрытия
Я хотел бы добавить здесь ответ, потому что есть предостережение, которое не рассматривается в других ответах.
Основываясь на моем тестировании в 5.3, кажется, что функции, которые определены внутри, if
структуры определены во время выполнения, а не во время компиляции, как и другие функции.
Например, вне условного блока это:
foo(); function foo(){ echo 'foo!'; }
отлично работает, потому что функция определена во время компиляции и выполняется во время выполнения. Но вызывая функцию перед ее определением, находясь внутри блока условий:
if(1){ foo(); // Call to undefined function! function foo(){ echo 'foo!'; } }
Вызвать call to undefined function
ошибки, по крайней мере, начиная с версии 5.3.
Но определение функции в блоке if до ее вызова действительно:
if(1){ function foo(){ echo 'foo!'; } foo(); // No errors, since function is defined! }
Таким образом, при определении функций внутри условного выражения возникает основная проблема: функция должна быть определена в коде перед вызовом функции, поскольку условные функции, по-видимому, не определены во время компиляции.
ОП также задал вопрос о производительности. Если условная функция определена во время выполнения вместо времени компиляции, как и большинство других функций, тогда эта функция не будет пользоваться ускорителями производительности, такими как кэширование OpCode, которое в зависимости от обстоятельств может замедлить ваше приложение. Например, если ваш основной файл php выглядит так:
if($IsLoggedIn){ // include files/functions and bootstrap here... }
Тогда все приложение может вообще не использовать кэширование OpCode.
В принципе да, в соответствии с руководством :
Любой допустимый PHP-код может появляться внутри функции, даже других функций и определений классов.
Лично у меня не было ситуации, в которой я бы действительно делал такую вещь. В большинстве случаев было бы проще группировать ваши функции в месте, где это действительно можно найти! 😉