Php вызов функции с параметрами. Создание функций в PHP. Синтаксис функций в php

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

Пример #1 Работа с функциями посредством переменных

function foo () {
echo "В foo()
\n" ;
}

function bar ($arg = "" )
{
echo "В bar(); аргумент был " $arg ".
\n" ;
}

// Функция-обертка для echo
function echoit ($string )
{
echo $string ;
}

$func = "foo" ;
$func (); // Вызывает функцию foo()

$func = "bar" ;
$func ("test" ); // Вызывает функцию bar()

$func = "echoit" ;
$func ("test" ); // Вызывает функцию echoit()
?>

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

Пример #2 Обращение к методам класса посредством переменных

class Foo
{
function Variable ()
{
$name = "Bar" ;
$this -> $name (); // Вызываем метод Bar()
}

Function Bar ()
{
echo "Это Bar" ;
}
}

$foo = new Foo ();
$funcname = "Variable" ;
$foo -> $funcname (); // Обращаемся к $foo->Variable()

?>

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

Пример #3 Пример вызова переменного метода со статическим свойством

class Foo
{
static $variable = "статическое свойство" ;
static function Variable ()
{
echo "Вызов метода Variable" ;
}
}

echo Foo :: $variable ; // Это выведет "статическое свойство". Переменная $variable будет разрешена в нужной области видимости.
$variable = "Variable" ;
Foo :: $variable (); // Это вызовет $foo->Variable(), прочитав $variable из этой области видимости.

?>

С версии PHP 5.4.0, можно вызывать callable -функцию, помещенную в переменную.

Пример #4 Сallable-фукнции

class Foo
{
static function bar ()
{
echo "bar\n" ;
}
function baz ()
{
echo "baz\n" ;
}
}

$func = array("Foo" , "bar" );
$func (); // выведет "bar"
$func = array(new Foo , "baz" );
$func (); // выведет "baz"
$func = "Foo::bar" ;
$func (); // выведет "bar" в PHP 7.0.0 и выше; в предыдущих версиях это приведет к фатальной ошибке
?>

Смотрите также is_callable() , call_user_func() , Переменные переменные и function_exists() .

Список изменений

8 years ago

$ wget
$ grep -l "\$\.\.\." php-chunked-xhtml/function.*.html

List of functions that accept variable arguments.
array_diff_assoc ()
array_diff_key ()
array_diff_uassoc ()
array()
array_intersect_ukey ()
array_map ()
array_merge ()
array_merge_recursive ()
array_multisort ()
array_push ()
array_replace ()
array_replace_recursive ()
array_unshift ()
call_user_func ()
call_user_method ()
compact ()
dba_open ()
dba_popen ()
echo()
forward_static_call ()
fprintf ()
fscanf ()
httprequestpool_construct ()
ibase_execute ()
ibase_set_event_handler ()
ibase_wait_event ()
isset()
list()
maxdb_stmt_bind_param ()
maxdb_stmt_bind_result ()
mb_convert_variables ()
newt_checkbox_tree_add_item ()
newt_grid_h_close_stacked ()
newt_grid_h_stacked ()
newt_grid_v_close_stacked ()
newt_grid_v_stacked ()
newt_win_choice ()
newt_win_entries ()
newt_win_menu ()
newt_win_message ()
newt_win_ternary ()
pack ()
printf ()
register_shutdown_function ()
register_tick_function ()
session_register ()
setlocale ()
sprintf ()
sscanf ()
unset()
var_dump ()
w32api_deftype ()
w32api_init_dtype ()
w32api_invoke_function ()
wddx_add_vars ()
wddx_serialize_vars ()
?>

3 years ago

A small, but helpful note. If you are trying to call a static function from a different namespace, you must use the fully qualified namespace, even if they have the same top level namespace(s). For example if you have the following class to call:

namespace Project \ TestClass ;
class Test {
static function funcToCall () {
return "test" ;
}
}
?>
You must call it as:
namespace Project \ OtherTestClass ;
class OtherTest {
$func = "\Project\TestClass::funcToCall" ;
$func ();
}
}
?>
and not:
class OtherTest {
static function callOtherFunc () {
$func = "TestClass::funcToCall" ;
$func ();
}
}
?>

9 months ago

While the documentation suggests that the use of a constant is similar to the use of a variable, there is an exception regarding variable functions. You cannot use a constant as the function name to call a variable function.

const DEBUGME ="func";
function func($s) { echo $s. "\n"; }

DEBUGME("abc"); // results in a syntax error

$call = DEBUGME;
$call("abc"); // does the job

But you can use a constant as an argument to a function. Here"s a simple workaround when you need to call a variable constant function:

function dynamic($what, $with)
{
$what($with);
}
dynamic(DEBUGME, "abc");

This makes sense to me to hide API"s and/or long (complicated) static calls.
Enjoy!

13 years ago

If you want to call a static function (PHP5) in a variable method:

Make an array of two entries where the 0th entry is the name of the class to be invoked ("self" and "parent" work as well) and the 1st entry is the name of the function. Basically, a "callback" variable is either a string (the name of the function) or an array (0 => "className", 1 => "functionName").

Then, to call that function, you can use either call_user_func() or call_user_func_array(). Examples:

class A {

Protected $a ;
protected $c ;

Function __construct () {
$this -> a = array("self" , "a" );
$this -> c = array("self" , "c" );
}

Static function a ($name , & $value ) {
echo $name , " => " , $value ++, "\n" ;
}

Function b ($name , & $value ) {
call_user_func_array ($this -> a , array($name , & $value ));
}

Static function c ($str ) {
echo $str , "\n" ;
}

Function d () {
call_user_func_array ($this -> c , func_get_args ());
}

Function e () {
call_user_func ($this -> c , func_get_arg (0 ));
}

class B extends A {

Function __construct () {
$this -> a = array("parent" , "a" );
$this -> c = array("self" , "c" );
}

Static function c () {
print_r (func_get_args ());
}

Function d () {
call_user_func_array ($this -> c , func_get_args ());
}

Function e () {
call_user_func ($this -> c , func_get_args ());
}

$a =& new A ;
$b =& new B ;
$i = 0 ;

A :: a ("index" , $i );
$a -> b ("index" , $i );

$a -> c ("string" );
$a -> d ("string" );
$a -> e ("string" );

# etc.
?>

Последнее обновление: 1.11.2015

Функции представляют собой набор инструкций, выполняющих определенное действие.

Синтаксис определения функции:

Function имя_функции([параметр [, ...]]) { // Инструкции }

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

После имени функции в скобках идет перечисление параметров. Даже если параметров у функции нет, то просто идут пустые скобки. Затем в фигурных скобках идет тело функции, содержащее набор инструкций.

Определим простейшую функцию:

Function display() { echo "вызов функции display()"; }

Данная функция не имеет параметров и все, что она делает - это вывод на страницу некоторого сообщения.

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

Возвращение значения и оператор return

Функция может возвращать некоторое значение - число, строку и т.д., то есть некоторый результат. Для возвращения значения в функции применяется оператор return , после которого указывается возвращаемое значение. Например:

Функция get() возвращает число, представляющее сумму квадратов от 1 до 9. Это число хранится в переменной $result . Благодаря оператору return мы можем присвоить значение, возвращаемое функцией get, какой-нибудь переменной: $a = get(); .

Использование параметров

Создадим функцию с параметрами:

Так как теперь функция $get использует параметры, то мы должны передать при вызове этой функции на место параметров некоторые значения. Если при вызове мы укажем значения не для всех параметров, то это будет ошибка, например: $a = get(1); .

Но мы можем использовать значения по умолчанию для параметров. Например:

В этом случае, если мы не укажем значение для второго параметра, то по умолчанию он будет равен 10.

Передача по ссылке

В примере выше мы передавали параметры по значению . Но в PHP есть и другая форма передачи параметров - по ссылке . Рассмотрим два этих способа передачи параметров и сравним. Стандартная передача параметра по значению:

\$number равно: $number"; function get($a) { $a*=$a; echo "Квадрат равен: $a"; } ?>

После вызова функции get() значение переменной $number не изменится, так как в эту функцию в качестве параметра мы передаем значение переменной.

\$number равно: $number"; function get(&$a) { $a*=$a; echo "Квадрат равен: $a"; } ?>

При передаче по ссылке перед параметром ставится знак амперсанда: function get(&$a) . Теперь интерпретатор будет передавать не значение переменной, а ссылку на эту переменную в памяти, в итоге, переменная $number после передачи на место параметра &$a также будет изменяться.

Подсказка:
Для получения полного списка встроенных PHP функций в правой колонке нажмите кнопочку Поиск при пустой строке поиска "PHP поиск".
Если Вы хотите узнать подробное описание с примером конкретной PHP функции укажите её в строке PHP поиск. →

В PHP существует две основные формы функций: встроенные и пользовательские.

Для определения пользовательской функции используется ключевое слово function .

Пример 1

Определение и вызов функции $str"; } заголовок ("Часть", 1); заголовок ("Глава", 2); заголовок ("Раздел", 3); ?>

Начиная с версии PHP 4.0 можно использовать значения аргументов, подставляемые по умолчанию.

Пример 2

Функция со значением аргумента по умолчанию $str"; } заголовок ("Часть", 1); заголовок ("Глава"); заголовок ("Раздел", 3); ?>

РЕЗУЛЬТАТ ПРИМЕРОВ 1-2:

Глава

Раздел

Примечание: Указанный ниже код будет отрабатывать не так, как Вы возможно ожидаете. Переменная $full во всех случаях будет true.

Fun($ar, false); function fun($row, $full = true){ ... }

Передача аргумента по ссылке

Пример 3

Передача аргумента по ссылке После вызова функции:
"; echo "af = $af; bf = $bf"; ?>

РЕЗУЛЬТАТ ПРИМЕРА 3:

Af = 10; bf = 6 После вызова функции: af = 16; bf = 6

Возврат значений

Для возврата значений из функции используется оператор return . Можно вернуть несколько значений, если применить список list() .

Пример 4

Функция, возвращающая список значений list ($фамилия, $имя, $отчество) = ФИО(); echo ""; echo "
фамилия: $фамилия"; echo "
имя: $имя"; echo "
отчество: $отчество
"; ?>

РЕЗУЛЬТАТ ПРИМЕРА 4:

Динамические функции

В PHP можно использовать динамические функции . Это означает, что если некоторой переменной присвоено имя функции, то с этой переменной можно обращаться точно так же, как с самой функцией.

Пример 5

Переменные функции "; } function funct2 () { echo "Мы внутри функции funct2();
"; } $myfunct = "funct1"; $myfunct(); $myfunct = "funct2"; $myfunct(); ?>

РЕЗУЛЬТАТ ПРИМЕРА 5:

Мы внутри функции funct1(); Мы внутри функции funct2();

Глобальные переменные

Чтобы переменная, созданная вне функции, была доступна внутри функции, надо объявить ее глобальной с помощью инструкции global .

Пример 6

Доступ к глобальной переменной

РЕЗУЛЬТАТ ПРИМЕРА 6:

Глобальная переменная имеет значение - 45

Статические переменные

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

Пример 7

Сохранение значения переменной между вызовами функции $ss. $str"; } funct ("Понедельник"); echo "Король гулял в парке"; funct ("Вторник"); echo "Король охотился"; ?>

Была создана и проинициализирована переменная $ss . По отношению к функции funct() эта переменная останется локальной. При втором и последующих вызовах функции funct() инициализация игнорируется, а запоминается последнее присвоенное значение.

РЕЗУЛЬТАТ ПРИМЕРА 7:

1. Понедельник

Король гулял в парке

2. Вторник

Король охотился


Читать дальше: Cтроки в PHP

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

Хотя тема функций часто воспринимается как сложная для начинающих программистов, но их в любом случае нужно знать.Возможно это займет много времени, но не сдавайтесь, ведь функции очень помогут вам в карьере программиста.

Создаем свою первую php функцию

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

Синтаксис для создания функции довольно очевидный и логичный. Во-первых, вы должны сказать PHP, что вы хотите создать функцию. Это можно сделать, введя ключевое слово function и ваше имя функции и некоторые другие вещи (о которых мы поговорим чуть позже).

Вот как выглядит объявление функции myCompanyName:

Примечание : Название функции может начинаться со знака «_», но не с цифры!
Это лишь каркас нашей функции, а внутри него мы можем поместить любой код, который захотим. При вызове функции он будет выполняться. Видите в фигурных скобках в приведенном выше примере «{}»? Эти скобки определяют, где должен быть наш код функции. Открывающая фигурная скобка «{» говорит PHP, что код функции начинается, а закрывающая фигурная «}» говорит PHP, что наша функция окончена!

Давайте добавим в нее что-то простенькое, например .

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

Вызов готовой функции php

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

!
"; myCompanyName(); echo "Рад вас видеть!
";

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

  • Всегда начинайте ваши функции с ключевым словом function.
  • Помните, что ваш код функции должны быть между «{» и «}».
  • Когда вы вызываете функцию, убедитесь, что пишете ее имя правильно.

Функции с параметрами

Еще одна полезная возможность состоит в том, что функции вы можете вызывать с параметрами, то есть передавать внутрь ее кода дополнительную информацию. Наша первая функция myCompanyName не очень-то и полезна, потому что все что она умеет, это печатать одну и ту же строку.

Однако, если бы мы использовали параметры, то мы могли бы добавить некоторые дополнительные фишки в нашу функцию! Параметр появляется скобках «()» и выглядит как обычная переменная PHP. Давайте создадим новую функцию, которая создает пользовательское приветствие основанное на имени человека, которое мы передадим в качестве параметра.

"; } ?>

Теперь когда мы будем вызывать функцию sayHello, то в скобках обязательно должны указывать параметр (имя), так как функция объявлена с параметром и игнорировать его нельзя.
Если мы хотим указывать несколько параметров, то просто перечисляем их при объявлении функции через запятую и все, ничего больше не требуется.

Возвращение значения функцией php

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

Как она возвращает значение? Лучше всего разобраться на примере. Объявим функцию с параметрами, а затем присвоим результат некоторой переменной, вот так:

"; $myNumber = mySum(3, 4); // Сохраняем результат вызова функции mySum в переменную $myNumber echo "После вызова функции, myNumber = " . $myNumber ."
"; ?>

Чтобы присвоить функции значение — в нее добавляется оператор return, видите его? Результат сложения двух чисел хранится в переменной $total, а с помощью return $total это значение передается самой функции. Затем мы просто присваиваем его переменной $myNumber после вызова функции mySum с двумя параметрами 3 и 4 (это числа которые следует сложить).

Практикуйтесь, разбирайтесь и у вас все получится!

В любом языке программирования существуют подпрограммы. В языке C они называются функциями, в ассемблере - подпрограммами, а в Pascal существуют даже два вида подпрограмм: процедуры и функции.

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

В PHP такими подпрограммами являются пользовательские функции.

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

Создание пользовательских функций

Пользовательская функция может быть объявлена в любой части программы (скрипта), до места ее первого использования. И не нужно никакого предварительного объявления, как в других языках программирования, в частности, в C. Преимущества применяемого в PHP подхода в следующем.

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

function Имя (аргумент1[=значение1],...,аргумент1[=значение1])
{
тело_функции
}

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

Требования, предъявляемые к именам функций:

  • Имена функций могут содержать русские буквы, но давать функциям имена, состоящие из русских букв не рекоммендуется;
  • Имена функций не должны содержать пробелов;
  • Имя каждой пользовательской функции должно быть уникальным. При этом, необходимо помнить, что регистр при объявлении функций и обращении к ним не учитывается. То есть, например, функции funct() и FUNCT() имеют одинаковые имена;
  • Функциям можно давать такие же имена, как и переменным, только без знака $ в начале имен.

Типы значений, возвращаемые пользовательскими функциями, могут быть любыми. Для передачи результата работы пользовательских функций в основную программу (скрипт) используется конструкция return . Если функция ничего не возвращает, конструкцию return не указывают. Конструкция return может возвращать все, что угодно, в том числе и массивы.

Приведем примеры использования пользовательских функций.


Top