This article has been localized into Russian by the community.
Функции
Функции в PHP, как и в любом другом языке программирования, позволяют инкапсулировать фрагмент кода и вызывать его из других частей программы. Это позволяет писать код, который можно будет использовать повторно в разных частях приложения, без того чтобы повторять этот код снова и снова. Вот пример простой PHP-функции:
<?php
function SayHello($to)
{
echo "Hello, ".$to;
}
?>
Функция всегда должна начинаться с ключевого слова function, дальше пишется имя функции, которую вы хотите объявить. В приведенном примере, мы назвали нашу функцию SayHello. За именем должна идти пара скобок, в которых можно объявить параметры функции. Параметры необязательны, но даже если их у вас нет, скобки все равно нужно поставить, как SayHello(). В нашей функции, мы определили параметр $to. Поскольку PHP - нетипизированный язык, вам не требуется указывать типы параметров, и данные любого типа могут быть переданы в функцию. Тело функции идет дальше в фигурных скобках, в данном примере простой вывод через echo, в котором мы используем параметр $to, чтобы отправить приветствие определенному человеку или объекту.
Вы можете использовать функцию просто написав ее имя и необходимый набор параметров, как тут:
<?php
function SayHello($to)
{
echo "Hello, ".$to;
}
SayHello("World");
?>
Функции могут также возвращать значение. В первом примере мы этого не делали, просто потому что не было необходимости, но это возможно и весьма полезно. Если вам приходилось использовать другие языки программирования, вы возможно привыкли объявлять, должна ли функция возвращать результат, и если да - то какого он типа. Тем не менее, в PHP этого не требуется. Давайте изменим нашу функцию так, чтобы она возвращала нужную строку, а не выводила ее:
<?php
function SayHello($to)
{
return "Hello, ".$to;
}
echo SayHello("World");
?>
Как вы можете видеть, мы просто заменили вывод строки на ее возврат (echo на return), и поэтому сам вывод выполняется там, где мы вызываем функцию. Именно так это обычно и делается, поскольку вывод данных напрямую из строки требует расположить команду строго там, где вывод должен произойти, а не в начале документа или подключенном файле.
Очень важный аспект использования функций - это области видимости (scope). Как только вы попадаете внутрь функции, вы оказываетесь в новой области видимости, и, если функции и классы автоматически являются глобальными, то переменные - нет. Это значит, что переменная, объявленная вне функции не будет автоматически доступна внутри нее. Попробуйте следующий пример, чтобы убедиться самим:
<?php
$var = "test";
function SayHello()
{
return "Current value of var: ".$var;
}
echo SayHello();
echo "<br /><br />";
echo "Current value of var: ".$var;
?>
В результате получится так, что первая команда вывода не знает значения для $var - она просто не знает о существовании этой переменной внутри функции. Вы можете объявить $var внутри функции и присвоить ей значение, но тогда ее не будет видно за пределами функции. И все же, есть возможность получить доступ к внешним переменным изнутри функции - их просто нужно объявить как глобальные внутри области видимости функции, вот так:
<?php
$var = "test";
function SayHello()
{
global $var;
return "Current value of var: ".$var;
}
?>
При объявлении функции вы можете сделать один или несколько параметров необязательными. Это достигается за счет значений по умолчанию при объявлении этих параметров. Можно сделать более одного необязательного параметра, но все они должны идти последними: нельзя объявить необязательный параметр, а после него - обязательный. В следующем примере мы объявим пару необязательных параметров, чтобы показать как это работает.
<?php
function GreetCoder($name, $msg = "Hello, coder!")
{
echo "A message to " . $name . ": " . $msg;
}
GreetCoder("John Doe");
echo "<br /><br />";
GreetCoder("John Doe", "This is a custom message!");
?>
Как вы можете видеть, мы можем вызвать функцию как с одним, так и с двумя параметрами. Результат зависит от того, что мы выберем, но в любом случае переменная $msg получит какое-то значение. Это может быть полезно во многих ситуациях, с которыми вы столкнетесь, когда напишете больше кода на PHP.