Как декларировать функцию в php
Приведём пример синтаксиса, используемого для описания функций:
Пример #1 Псевдокод для демонстрации использования функций
function foo ( $arg_1 , $arg_2 , /* . */ $arg_n )
echo «Пример функции.\n» ;
return $retval ;
>
?>?php
Внутри функции можно использовать любой корректный PHP-код, в том числе другие функции и даже объявления классов.
Имена функций следуют тем же правилам, что и другие метки в PHP. Корректное имя функции начинается с буквы или знака подчёркивания, за которым следует любое количество букв, цифр или знаков подчёркивания. В качестве регулярного выражения оно может быть выражено так: ^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$ .
Подсказка
Функции не обязаны быть определены до их использования, исключая тот случай, когда функции определяются условно, как это показано в двух последующих примерах.
В случае, когда функция определяется в зависимости от какого-либо условия, например, как это показано в двух приведённых ниже примерах, обработка описания функции должна предшествовать её вызову.
Пример #2 Функции, зависящие от условий
/* Мы не можем вызвать функцию foo() в этом месте,
поскольку она ещё не определена, но мы можем
обратиться к bar() */
if ( $makefoo ) function foo ()
echo «Я не существую до тех пор, пока выполнение программы меня не достигнет.\n» ;
>
>
/* Теперь мы благополучно можем вызывать foo(),
поскольку $makefoo была интерпретирована как true */
if ( $makefoo ) foo ();
function bar ()
echo «Я существую сразу с начала старта программы.\n» ;
>
Пример #3 Вложенные функции
function foo ()
function bar ()
echo «Я не существую пока не будет вызвана foo().\n» ;
>
>
?php
/* Мы пока не можем обратиться к bar(),
поскольку она ещё не определена. */
/* Теперь мы можем вызвать функцию bar(),
обработка foo() сделала её доступной. */
Все функции и классы PHP имеют глобальную область видимости — они могут быть вызваны вне функции, даже если были определены внутри и наоборот.
PHP не поддерживает перегрузку функции, также отсутствует возможность переопределить или удалить объявленную ранее функцию.
Замечание: Имена функций регистронезависимы для символов ASCII от A до Z , тем не менее, предпочтительнее вызывать функции так, как они были объявлены.
Функции PHP поддерживают как списки аргументов переменной длины, так и значения аргументов по умолчанию. Смотрите также описания функций func_num_args() , func_get_arg() и func_get_args() для более детальной информации.
Можно вызывать функции PHP рекурсивно.
Пример #4 Рекурсивные функции
function recursion ( $a )
if ( $a < 20 ) echo " $a \n" ;
recursion ( $a + 1 );
>
>
?>?php
Замечание: Рекурсивный вызов методов/процедур с глубиной более 100-200 уровней рекурсии может вызвать переполнение стека и привести к аварийному завершению скрипта. В частности, бесконечная рекурсия будет считаться программной ошибкой.
User Contributed Notes
There are no user contributed notes for this page.
- Функции
- Функции, определяемые пользователем
- Аргументы функции
- Возврат значений
- Обращение к функциям через переменные
- Встроенные функции
- Анонимные функции
- Стрелочные функции
- Callback-функции как объекты первого класса
- Copyright © 2001-2024 The PHP Group
- My PHP.net
- Contact
- Other PHP.net sites
- Privacy policy
Как декларировать функцию в php
Функции представляют собой блок инструкций, которые многократно можно вызывать в различных частях программы. Функции позволяют разделять программуу на меньшие функциональные части.
Общий синтаксис определения функции выглядит следующим образом:
function имя_функции([параметр [, . ]]) < // Инструкции >
Определение функции начинается с ключевого слова function , за которым следует имя функции. Имя функции должно начинаться с алфавитного символа или подчеркивания, за которыми может следовать любое количество алфавитно-цифровых символов или символов подчеркивания.
После имени функции в скобках идет перечисление параметров. Даже если параметров у функции нет, то просто идут пустые скобки. Затем в фигурных скобках идет тело функции, содержащее набор инструкций.
Определим простейшую функцию:
Данная функция назывется hello . Она не имеет параметров, поэтому после названия функции идут пустые скобки. Блок функции содержит только одну инструкцию, которая выводит сообщение «Hello PHP».
Чтобы функция сработала, ее надо вызвать. Для вызова функции указывается ее имя, после которого в скобках идут значения для ее параметров (если, кончено, она имеет параметры):
название_функции (значения_для_параметров_функции);
Например, вызовем вышеопределенную функцию hello :
hello(); // вызов функции ?>
Поскольку для функции hello мы не определили никаких параметров, то при ее вызове указываем название функции и после нее пустые круглые скобки. Заканчивается вызов функции точкой с запятой.
В итоге браузер выведет сообщение:
Hello PHP
Преимуществом функций является то, что, определив однажды, мы можем многократно их вызывать в различных частях программы:
METANIT.COM Hello PHP"; > hello(); hello(); hello(); ?>
Стоит отметить, что в данном случае сначала определяется функция, а затем она вызывается. Но мы также можно сделать наоборот:
Тем не менее есть исключения. В частности, при определении функции при определенном условии.
// hello(); // здесь будет ошибка if(true) < function hello() < echo "Hello PHP"; >hello(); >
Как в php декларировать простые объекты в DocBlocks?
Обычно моя IDE мне подсказывает свойства и методы классов которые есть в коде, это удобно
Но когдаа я возвращаю простой объект как в примере то IDE мне не чего не показывает, это не удобно.
Можно ли как то DocBlocks задокументировать эти поля что бы IDE подсказывал мне их?
Я знаю что с DocBlocks можно много что декларировать для IDE но вот тут что то я не знаю даже как погуглить.class kernel< public function a() < $object = $this->b(); > public function b():object < $return = new \ stdClass(); $return->data1 = 'hello'; $return->data2 = 'world'; return $return; > >- Вопрос задан более трёх лет назад
- 78 просмотров
Как декларировать функцию в php
While waiting for native support for typed arrays, here are a couple of alternative ways to ensure strong typing of arrays by abusing variadic functions. The performance of these methods is a mystery to the writer and so the responsibility of benchmarking them falls unto the reader.
PHP 5.6 added the splat operator (. ) which is used to unpack arrays to be used as function arguments. PHP 7.0 added scalar type hints. Latter versions of PHP have further improved the type system. With these additions and improvements, it is possible to have a decent support for typed arrays.
declare ( strict_types = 1 );
function typeArrayNullInt (? int . $arg ): void >
function doSomething (array $ints ): void (function (? int . $arg ) <>)(. $ints );
// Alternatively,
(fn (? int . $arg ) => $arg )(. $ints );
// Or to avoid cluttering memory with too many closures
typeArrayNullInt (. $ints );function doSomethingElse (? int . $ints ): void /* . */
>$ints = [ 1 , 2 , 3 , 4 , null ];
doSomething ( $ints );
doSomethingElse (. $ints );
?>Both methods work with all type declarations. The key idea here is to have the functions throw a runtime error if they encounter a typing violation. The typing method used in doSomethingElse is cleaner of the two but it disallows having any other parameters after the variadic parameter. It also requires the call site to be aware of this typing implementation and unpack the array. The method used in doSomething is messier but it does not require the call site to be aware of the typing method as the unpacking is performed within the function. It is also less ambiguous as the doSomethingElse would also accept n individual parameters where as doSomething only accepts an array. doSomething’s method is also easier to strip away if native typed array support is ever added to PHP. Both of these methods only work for input parameters. An array return value type check would need to take place at the call site.
If strict_types is not enabled, it may be desirable to return the coerced scalar values from the type check function (e.g. floats and strings become integers) to ensure proper typing.
2 years ago
same data type and same value but first function declare as a argument type declaration and return int(7)
and second fucntion declare as a return type declaration but return int(8).function argument_type_declaration(int $a, int $b) return $a+$b;
>function return_type_declaration($a,$b) :int return $a+$b;
>