Имеет ли значение порядок определения функции?

в приведенном ниже скрипте имеет ли значение порядок, в котором объявляются элементы?

например, если add_action указывает на функцию, которая еще не определена? Имеет ли значение или объявление функции всегда предшествует любому коду, в котором его называют?

add_action('load-categories.php', 'my_admin_init');
function my_admin_init(){
//do something
}

7 ответов


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

Это первый метод, и он будет работать:

some_func($a,$b);

function some_func($a,$b)
{
    echo 'Called';
}

Это второй метод и также будет работать:

function some_func($a,$b)
{
    echo 'Called';
}

some_func($a,$b);

С руководство по PHP:

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

однако, хотя это скорее личное предпочтение, я бы настоятельно рекомендовал включить все функции, которые вы фактически используете во внешнем затем с помощью require_once() или include_once() (в зависимости от вкусов) в самой верхней части вашего основного файла PHP. Этот имеет больше логического смысла - если кто-то еще читает ваш код, ослепительно очевидно, что вы используете пользовательские функции, и они расположены в functions.php. Экономит много догадок ИМО.


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


нет.
Это не C :P...
Как видите здесь весь файл сначала анализируется, а затем казнен.
Если вызывается функция, которая не существует, php выдаст ошибку.

фатальная ошибка: вызов неопределенной функции


Это не имеет значения, пока он объявлен где-то на странице.

Как видно здесь:

http://codepad.org/aYbO7TYh


со ссылкой на пользовательские функции инструкции :

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

Итак, в основном: вы можете вызвать функцию до того, как будет написано ее определение-но, конечно, PHP должен иметь возможность посмотреть это определение, когда пытаются его назвать.


согласно моему личному опыту, в некоторых особых случаях (например, передача массива в функции или функции внутри функции и т. д.). Это лучший вариант для определения функции над вызовом. Из-за этого иногда ни функция не работает, ни PHP не выдает ошибку.

в обычных функциях php это не имеет значения. Можно использовать оба типа.