Как сделать отдельный файл с функциями php

Добавил пользователь Владимир З.
Обновлено: 04.10.2024

Рождение функции

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

Затем в фигурных скобках располагается ее тело, где прописывается программный код, который будет выполняться после ее вызова. Пока хватит! Давайте реализуем то, что описали:

В PHP существует возможность подключения PHP (и не только) файлов в другие. Благодаря этому мы можем разделить большой скрипт или вёрстку сайта на несколько частей.

Функция include

Представим, что у нас в корне сайта лежат файлы index.php и config.php. И мы хотим в первый файл подключить второй. Это можно сделать так:

index.php

config.php

Функция include подключает содержимое скрипта config.php, как если бы код этого скрипта находился в самом index.php.

Результат запуска скрипта index.php:

В данном примере мы указали относительный путь к скрипту, т.е. путь относительно вызывающего скрипта. Эту тему мы подробно разберём на уроке Абсолютные и относительные пути в PHP.

Функция require

Функция require() подключает файл точно также, как и include() .

Разница в том, что при невозможности подключения файла (файл отсутствует или недостаточно прав) функция include() покажет ошибку и продолжит работу, а require() покажет ошибку и остановит выполнение скрипта.

Функции include_once и require_once

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

После этой ошибки include_once() продолжит работу, а require_once() остановит скрипт.

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

Подключаемый скрипт может передать подключающему скрипту какие-либо данные с помощью оператора return :

index.php

config.php

В коде выше скрипт config.php возвращает массив, который мы в файле index.php принимаем и сохраняем в переменную $config.

Область видимости подключаемых файлов

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

Программисты не пишут код в одном файле, а разбивают проект на десятки файлов и папок. Без этого нельзя обойтись, если хотите ориентироваться в проекте. Если у нас будет 1 файл на 100000 строк кода, то работать с ним будет затруднительно.
Один php файл, можно подключить в другой, например так:

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

У функции имеются братья. Такие как include_once, require, require_once.

Отличия заключаются в том, что если использовать require, то в случае если файла нет, будет выдаваться ошибка и выполнение скрипта дальше не пойдет, в отличие от include.

В свою очередь постфикс _once означает, что несмотря на то, сколько раз вы попытаетесь подключить файл, он подключится только 1 раз.

Теперь обратите внимание, что организовывать код проекта, при помощи include и require - неправильный подход. Он был хорош 20 лет назад, когда лучше просто не умели.

С помощью функции autoload, вы сможете сделать так, чтобы когда вы пишите название класса например:

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

Приведу простой пример того, как можно сделать автозагрузку классов.

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

В данном случае, мы пытаемся создать экземпляр несуществующего класса Abracadabra .
С помощью spl_autoload_register определили функцию, которая будет разбираться с этой ситуацией. В переменной $class оказалось название класса, который мы вызываем.
Сейчас мы просто печатаем название класса при помощи echo , и нам выведется текст: "Abracadabra".

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

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

Она будет выглядеть следующим образом:

Это очень простой пример, который вы не захотите использовать в настоящих проектах.

У каждого фреймворка могут быть свои способы организовать автозагрузку. Вот описание того, как это работает в yii2: yii2 автозагрузка классов.

Некоторые также придумывают свои велосипеды.

Также существует composer, в котором, при помощи autoload, организована автозагрузка многочисленных расширений.

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

Я очень новичок в PHP. Поэтому, пожалуйста, скажите мне, я должен включить первый файл PHP во второй?

Пожалуйста, покажи мне пример. Вы можете предоставить несколько ссылок, если хотите.

4 ответа

Да, включите первый файл во второй. Это все.

Смотрите пример ниже,

сумма двух чисел 6 произведение двух чисел 6

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

Вы можете написать функцию в отдельном файле (скажем, common-functions.php) и включить ее, где это необходимо.

Вы можете включить common-functions.php в другой файл, как показано ниже.

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

Если у меня есть index.php, как это

и file2.php - require_once('file1.php'); func1("Привет", "мир");

И второй случай, если index.php include('includes/file1.php');

и я вызываю file2.php с помощью ajax, могу ли я выполнить свою функцию в file1.php, а затем вызвать ее из file2.php

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

Для подключения файлов PHP предоставляет ряд возможностей.

Инструкция include

Инструкция include подключает в программу внешний файл с кодом php. Так, для примера определим файл welcome.php :

Здесь определена функция welcome , которая в качестве параметра принимает условное имя и использут его для вывода приветствия.

Теперь подключим данный файл в нашу программу, которая определена в другом файле в той же папке:

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

Конструкция include может использовать как относительные, так и абсолютные пути. Например, выше использовался относительный путь. Или, к примеру, если мы имеем слующую структуру

То чтобы подключить файл welcome.php из папки scripts , в файле index.php необходимо использовать следующий относительный путь:

Если файл welcome.php располагается по полному пути C:\localhost\scripts\welcome.php , то также можно было бы использовать абсолютный - полный путь:

Инструкция include_once

Использование инструкции include имеет недостатки. Так, мы можем в разных местах кода неумышленно подключить один и тот же файл, что при выполнении кода вызовет ошибки.

Чтобы исключить повторное подключение файла, вместо инструкции include следует применять инструкцию include_once

И теперь, если мы подключим этот же файл с помощью include_once еще где-нибудь ниже, то это подключение будет проигнорировано, так как файл уже подключен в программу.

Инструкции require и require_once

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

И также если у нас в коде встретятся несколько инструкций require , которые подключают один и тот же файл, то интерпретатор выдаст ошибку. И также чтобы избежать данной ситуации, следует использовать инструкцию require_once :

Функция spl_autoload_register

В больших приложениях количество подключаемых файлов может быть довольно большим. Однако встроенная функция spl_autoload_register() в определенных ситуациях позволяет избежать большого количества инклудов. В качестве параметра она принимает функцию автозагрузки. Эта функция автоматически вызывается, когда в программе начинает использоваться неизвестный класс или интерфейс. И функция автозагруки пытается загрузить этот класс или интерфейс. В качестве параметра функция автозагрузки принимает название класса или интерфейса, которые надо загрузить.

Например, пусть у нас будет файл Person.php , в котором располагается класс Person :

Обращаю внимание, что название файла соответствует названию класса.

Используем функцию автозагрузки для подключения подобного класса:

Функция spl_autoload_register() в качестве параметра принимает название функции автозагрузки - в данном случае это функция my_autoloader() . В качестве параметра она принимает название класса. Например, в данном случае используется класс Person, который в этом скрипте не определен. И когда программа встретит использование данного класса, она вызовет функцию my_autoloader() , в качестве параметра $class передаст в нее название класса Person.

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

Читайте также: