php передать функцию как параметр
Принимать функцию в качестве параметра в PHP
мне было интересно, можно ли передать функцию в качестве параметра в PHP; я хочу что-то вроде того, когда вы программируете в JS:
Я хочу, чтобы выполнить эту функцию где-то в exampleMethod. Это возможно в PHP?
8 ответов:
это возможно, если вы используете PHP 5.3.0 или выше.
посмотреть Анонимные Функции в руководстве.
в вашем случае, можно определить exampleMethod такой:
просто, чтобы добавить к другим, вы можете передать имя функции:
Это будет работать в PHP4.
вы также можете использовать create_function чтобы создать функцию в качестве переменной и передать ее. Хотя, мне нравится ощущение анонимные функции лучше. Иди зомбат.
было бы здорово, если бы вы могли изобрести что-то вроде этого (вдохновленный Laravel Illuminate):
согласно ответу @zombat, лучше сначала проверить анонимные функции:
или проверить тип аргумента начиная с PHP 5.4.0:
простой пример использования класса :
Пример 1: basic
Пример 2: std object
Пример 3: нестатический вызов класса
Пример 4: вызов статического класса
как я вижу здесь, анонимная функция может помочь вам: http://php.net/manual/en/functions.anonymous.php
то, что вам, вероятно, понадобится, и это не сказано, прежде чем это как передать функцию, не оборачивая ее внутри функции, созданной на лету. Как вы увидите позже, вам нужно будет передать имя функции, записанное в строку в качестве параметра, проверить его «вызываемость» и затем вызвать его.
в функция для проверки:
затем, чтобы вызвать его, используйте этот фрагмент кода (если вам также нужны параметры, поместите их в массив), видимый по адресу:http://php.net/manual/en/function.call-user-func.php
как это следует (аналогичным, без параметров, способом):
вот класс, объясняющий, как сделать что-то подобное :
Функция Php как параметр функции
В моем проекте php у меня есть некоторые функции, которые в некоторых случаях я хочу вызывать в блоке try-catch, а в некоторых случаях не в блоке try-catch.
А теперь я хочу написать функцию, которая получает некоторую функцию в качестве параметра, вызывает ее и возвращает false в случае исключения.
Примерный код, подобный этому, и с поддержкой различного количества параметров для функции someFunction.
Как это организовать?
Решение
Вы должны определить свои оригинальные функции как Затворы поэтому они представлены переменными и могут быть переданы в качестве аргументов функции.
Начиная с PHP 5.6 вы также можете использовать оператор распространения что делает его частью пирога, чтобы поддержать многократные аргументы. Таким образом, один tryIt Функция может содержать функции с различным количеством параметров:
Другие решения
PHP позволяет вызывать несколько вещей, как если бы они были функциями — это включает в себя:
Все это может быть обозначено callable typehint. Реализация вашей функции как таковой:
позволит вам использовать tryTo() за что-нибудь PHP считает вызываемым и обеспечивает, что все, что вы передаете, может быть использовано для вызова функции.
Так что будет работать следующее:
Ты можешь видеть Вот для дополнительной информации.
Тем не менее, я серьезно подвергаю сомнению сценарий использования такой функции — как правило, исключения не должны возникать, если что-то не так, и использование такой функции открывает вас для тихих сбоев. По крайней мере, вы должны регистрировать возникшее исключение, чтобы видеть, что что-то пошло не так, но, по моему мнению, вы должны обрабатывать определенные исключения, где бы они ни были актуальны. Это, однако, совершенно иное обсуждение, и оно никак не влияет на ваш вопрос.
Функции PHP
В мире программирования и сценариев существует два способа писать код. Первый из них — это написать длинные и монолитные разделы сценария. Другой — разбить код на аккуратные, автономные блоки, которые можно использовать повторно, не изобретая один и тот же код снова и снова. Очевидно, что второй метод предпочтительнее первого, а фундаментальным строительным блоком этого подхода к написанию сценариев PHP является функция.
Функция — это именованный блок кода, который может быть вызван из любого другого участка кода для выполнения определенной задачи. Значения (аргументы) могут быть переданы в функцию, чтобы их можно было использовать в сценарии функции, а функция, в свою очередь, может возвращать результаты в то место сценария, из которого она была вызвана.
Функции в PHP существуют в двух формах:
Создание пользовательской функции PHP
Первым шагом в создании функции PHP является указание имени, по которому вы будете ссылаться на функцию. В соответствии с соглашением об именах для функций PHP, они должны начинаться с буквы или подчеркивания и не должны содержать каких-либо пробелов или знаков препинания. Важно также предусмотреть, чтобы имя вашей функции не конфликтовало ни с одной из встроенных функций PHP.
Примечание: Имена функций не чувствительны к регистру букв.
Пример
Результат выполнения кода:
Параметры функции PHP
Пример
Результат выполнения кода:
Пример
Результат выполнения кода:
Передача параметров в функцию по ссылке
По умолчанию параметры функции передаются по значению, поэтому, если значение аргумента внутри функции изменяется, оно не затрагивается вне функции. Если нужно позволить функции изменять значения параметров, последние должны быть переданы по ссылке.
Передача параметров по ссылке выполняется добавлением амперсанда (&) к имени параметра в определении функции, как показано в примере ниже:
Пример
Результат выполнения кода:
Значения по умолчанию для параметров функции
Функции могут определять значения аргументов по умолчанию. Чтобы установить значение по умолчанию просто вставьте имя параметра, затем знак равенства (=) и значение по умолчанию:
Пример
Результат выполнения кода:
Примечание: Все параметры, для которых установлены значения по умолчанию, должны находиться правее параметров, для которых значения по умолчанию не заданы. В противном случае ваш код выдаст ошибку.
Возврат значения из функции PHP
В следующем примере возвращаемое функцией значение присваивается переменной:
Пример
Результат выполнения кода:
Функция не может возвращать несколько значений. Но мы можем получить несколько результатов, возвращая массив, как показано в следующем примере:
Пример
Результат выполнения кода:
Строгая типизация
Обратите внимание, что в приведенном выше примере мы не указывали PHP-интерпретатору, к какому типу данных принадлежит переменная.
PHP — это слабо типизированный язык и он автоматически связывает тип данных с переменной в зависимости от ее значения. Благодаря этой особенности, мы можем добавлять строки к целому числу, не вызывая ошибки.
В следующем примере функция получает параметры как число, так и строку, не используя strict :
Пример
Результат выполнения кода:
Пример
Результат выполнения кода будет примерно такой:
В этом примере мы передаём функции в качестве аргументов как число, так и строку, но здесь мы добавили строгий ррежим strict и получили фатальную ошибку.
Объявления типа возвращаемого значения
Чтобы объявить режима строгой типизации для возвращаемого значения функции, добавьте двоеточие (:) и тип прямо перед открывающей фигурной скобкой < при объявлении функции.
Пример
Результат выполнения кода:
Укажем тип возвращаемого значения, отличный от типов аргументов, и убедимся, что тип возвращаемого значения функции является правильным:
Php передать функцию как параметр
To experiment on performance of pass-by-reference and pass-by-value, I used this script. Conclusions are below.
3 valuue yes 129 s
4 reference yes 66 us
1. PHP is already smart about zero-copy / copy-on-write. A function call does NOT copy the data unless it needs to; the data is
only copied on write. That’s why #1 and #2 take similar times, whereas #3 takes 2 million times longer than #4.
[You never need to use &$array to ask the compiler to do a zero-copy optimisation; it can work that out for itself.]
2. You do use &$array to tell the compiler «it is OK for the function to over-write my argument in place, I don’t need the original
any more.» This can make a huge difference to performance when we have large amounts of memory to copy.
(This is the only way it is done in C, arrays are always passed as pointers)
3. The other use of & is as a way to specify where data should be *returned*. (e.g. as used by exec() ).
(This is a C-like way of passing pointers for outputs, whereas PHP functions normally return complex types, or multiple answers
in an array)
5. Sometimes, pass by reference could be at the choice of the caller, NOT the function definitition. PHP doesn’t allow it, but it
would be meaningful for the caller to decide to pass data in as a reference. i.e. «I’m done with the variable, it’s OK to stomp
on it in memory».
*/
?>
A function’s argument that is an object, will have its properties modified by the function although you don’t need to pass it by reference.
In function calls, PHP clearly distinguishes between missing arguments and present but empty arguments. Thus:
The best approach, it seems to me, is to always use a sentinel like null as the default value of an optional argument. This way, callers like g and g’s clients have many options, and furthermore, callers always know how to omit arguments so they can omit one in the middle of the parameter list.
PASSING A «VARIABLE-LENGTH ARGUMENT LIST OF REFERENCES» TO A FUNCTION
As of PHP 5, Call-time pass-by-reference has been deprecated, this represents no problem in most cases, since instead of calling a function like this:
myfunction($arg1, &$arg2, &$arg3);
provided you have defined your function as
function myfuncion($a1, &$a2, &$a3) < // so &$a2 and &$a3 are
// declared to be refs.
.
>
In the following code I tried to amend this by using the
array() language-construct as the actual argument in the
call to the function.
Передача функции в качестве переменных другим функциям
Такая структура сработает в JavaScript, возможно ли создать аналагичную в PHP?
Добавлено через 5 минут
А вообще надо передать тело функции объекту, чтобы он выполнил её при определённых условиях
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Передача параметров функциям. Можно ли изменить этот параметр внутри функции
Доброго времени суток, господа знатоки.В универе препод задал сделать проверку входных данных на.
Передача функции в качестве аргумента другой функции
в книге Харви и Пол Дейтл нашел следующий вариант решения задачи, передачи функции в качестве.
Передача функции в качестве аргумента
Передаю в функцию (А) в качестве аргумента другую функцию (Б). В функцию Б передаю переменную из А.
Передача функции в качестве параметра
Как передать функцию с параметрами в transform? Т.е., например, мне надо из каждого числа вектора.
Перед вызовом замыкания из переменной объекта его надо записать в любую другую переменную.
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Передача функции в качестве параметра
Может кто помочь объяснить следующую часть кода: double MyMethod(Func f.
Передача функции в качестве параметра
Все привет. Помогите в решении следующей проблемы: есть класс XXX, один из методов которого.
Передача функции в качестве параметра
Есть функция которая генерирует строковые переменные и записывает их в файл. В файл они должны.