#4. 1 php Создание функции

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

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

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

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

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

Создание функции

Как же создавать свои собственные функции? Ниже приведен формальный синтаксис описания функции:

function function_name([argument list... ])
{
    [statements;]
    [return value;]
}

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

function nav_bar()
{
    ...
}

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

function nav_bar($text, $copyright)
{
    echo "<hr>";
    echo "<center>";
    echo "<a href='home.htmr'>Добро пожаловать!</a>   ";
    echo "<a href='map.html'>Kapта сайта</a>   ";
    echo "<a href='help.html'>Помощь</а>";
    echo "<hr>";
    echo "</center>";
}

Теперь каждый раз при вызове данной функции будет формироваться панель навигации. Использование функции имеет еще одно преимущество — теперь для внесения изменений в внешний вид панели требуется изменить код только в одном месте, а не редактировать множество файлов.

Пример. Вызов функции nav_bar

<HTML>
    <HEAD>
        <TITLE>
            Вызов функции
        </TITLE>
    </HEAD>
    <BODY>
        <H1>
            Вызов функции
        </H1>
        <?php
            echo "<H3>Добро пожаловать!</H3>";
            echo "<br>";
            echo "Для навигации используйте ссылки";
            echo "<br>";
            echo "<br>";

            nav_bar();

            function nav_bar()
            {
                echo "<hr>";
                echo "<center>";
                echo "<a href='home.html'>Домой</a>   " ;
                echo "<a href='map.html'>Kapта сайта</a>   ";
                echo "<a href='help.html'>Помощь</a>";
                echo "</center>";
            }
        ?>
    </BODY>
</HTML> 

На рис. 1 показана панель навигации, расположенная в нижней части web-страницы. Теперь для ее создания достаточно просто вызвать функцию nav_bar.



Рис. 1. Панель навигации, созданная функцией

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

Key Words for FKN + antitotal forum (CS VSU):