Как вызвать функцию в php из другого файла
Перейти к содержимому

Как вызвать функцию в php из другого файла

  • автор:

Вызов функции другого файла

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

Итак, подключаем в нужном нам файле файл с функциями уведомлений:

include_once ($_SERVER['DOCUMENT_ROOT'].'/includes/notification.php');

далее вызываем нужную функцию:

Как вызвать функцию в php из другого файла

Нужен код ACore.php
В общем случае – подключаешь файл ACore.php (include*/require*), создаёшь объект класса из ACore.php, и используешь нужный метод (функцию) этого класса в index.php.

Вообще пишу CMS и сейчас пытаюсь подключить ЧПУ

session_start ();
header ( «Content-Type:text/html;charset=UTF-8» );
require_once( «classes/site/ACore.php» );

if( $content != «main» ) <
$class = getClass ();
>
else <
$class = ‘main’ ;
>

в индексе пытаюсь разобрать ссылку и понять какой класс подключать

abstract class ACore

public function __construct () <
$this -> db = mysql_connect ( HOST , USER , PASSWORD );
if(! $this -> db ) <
exit( «Ошибка соединения с базой данных» . mysql_error ());
>
if(! mysql_select_db ( DB , $this -> db )) <
exit( «Нет такой базы данных» . mysql_error ());
>
mysql_query ( «SET NAMES ‘UTF8′» );

function getClass () <
$alias = substr ( $_SERVER [ «REQUEST_URI» ], 1 );
if( $alias == «/» ) <
$content = «main» ;
>else <
$query = «SELECT `link` FROM `sef` WHERE `alias`=’ $alias ‘» ;
$result = mysql_query ( $query );
if(! $result ) <
exit( mysql_error ());
>
$row = mysql_fetch_array ( $result , MYSQL_ASSOC );
if ( $result_set ) $result_set -> close ();
$vars = parse_url ( $row [ «link» ]);
parse_str ( $vars [ «query» ], $vars );
$content = $vars [ ‘option’ ];
>
return $content ;
>
>

это абстрактный основной класс от которого наследуются другие классы. Категории, меню и тд
Вообщем, я хочу разобрать ссылку и понять какой класс подключить, но функцию на разбор ссылки не вызвать ,а если прописывать ее в index.php ,то придется еще раз делать подключение к БД, то есть будет подключение и в index и в ACore , а это не есть хорошо(я так думаю)

Как вызвать функцию в php из другого файла

Покинул форум
Сообщений всего: 2
Дата рег-ции: Нояб. 2011

Помог: 0 раз(а)

Всем доброго времени суток!
Хочу задать вопрос: как вызвать скрипт php из другого файла, если тот другой файл — это полностью php скрипт? Если что-то непонятно объяснил, спросите, попробую по-подробнее

Отправлено: 01 Ноября, 2011 — 22:55:41

Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011
Откуда: Крым

Помог: 25 раз(а)

require_once «file.php» ; //тут естественно надо указать путь к файлу

(Отредактировано автором: 01 Ноября, 2011 — 23:00:27)

——
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё.

Отправлено: 01 Ноября, 2011 — 23:16:41

Покинул форум
Сообщений всего: 2
Дата рег-ции: Нояб. 2011

Помог: 0 раз(а)

snikers987 пишет:
require_once «file.php» ; //тут естественно надо указать путь к файлу
Отправлено: 02 Ноября, 2011 — 10:12:46

Покинул форум
Сообщений всего: 122
Дата рег-ции: Нояб. 2011
Откуда: Москва

Помог: 0 раз(а)

snikers987, а почему нельзя include() в таком случае использовать?
Отправлено: 02 Ноября, 2011 — 11:14:49

Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011
Откуда: Крым

Помог: 25 раз(а)

А кто сказал что нельзя? можно и include() и include_once() и просто require() , но для подключения критического кода лучше использовать require_once().

(Отредактировано автором: 02 Ноября, 2011 — 11:15:43)

——
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё.

Отправлено: 02 Ноября, 2011 — 11:24:56

Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007
Откуда: Berlin

Помог: 707 раз(а)

snikers987 пишет:
но для подключения критического кода лучше использовать require_once().

Чем лучше?
Например, в моем случае это
function __autoload ( $className )
return include_once ( str_replace ( ‘_’ , ‘/’ , $className ) . ‘.php’ ) ;

— ведь require подключает файл при запуске а не при исполнении.
Кроме того, include породит Warning, тогда как require — Fatal error
Имею ввиду, что у каждой конструкции есть своя область применимости, стало быть не совсем верно говорить о том, что какая-то предпочтительнее.

——
Есть в мире две бесконечные вещи — это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.

Отправлено: 02 Ноября, 2011 — 11:35:06

Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011
Откуда: Крым

Помог: 25 раз(а)

Ну я написал критического кода, имелось ввиду без которого скрипт работать не сможет.

Напимер config.php , с конектом к базе.

(Отредактировано автором: 02 Ноября, 2011 — 11:36:15)

——
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё.

Отправлено: 02 Ноября, 2011 — 11:39:56

Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007
Откуда: Berlin

Помог: 707 раз(а)

require вернет Вам fatal, который Вы никак не сможете уже обработать. Именно поэтому для критичных участков include лучше.
Вы можете написать:

if ( $result = include_once ( ‘absent_file.php’ ) )
//use $result
//have an error
throw new Exception ( ‘file not found’ ) ;

Но не можете сделать то же самое с require. А исключение потом и обработать можно.

——
Есть в мире две бесконечные вещи — это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.

Отправлено: 02 Ноября, 2011 — 12:23:31

Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011
Откуда: Крым

Помог: 25 раз(а)

тоесть include_once «core.php»; правильнее? В этом случаи инклюд выдаст варнинг, а затем еще будут вызовы не известных функции, констант, лучше сразу получить фатал еррор, и все, что и делает конструкция require();

——
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё.

Отправлено: 02 Ноября, 2011 — 12:23:59

Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007
Откуда: Berlin

Помог: 707 раз(а)

snikers987 пишет:
тоесть include_once «core.php»; правильнее?

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

——
Есть в мире две бесконечные вещи — это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.

Отправлено: 02 Ноября, 2011 — 12:26:00

Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011
Откуда: Крым

Помог: 25 раз(а)

Может я чегото не догоняю, но как по середине? Ядро скрипта подключается в начале сценария, и при его отсутсвии дальнейшее выполнение бессмысленно..

(Отредактировано автором: 02 Ноября, 2011 — 12:28:32)

——
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё.

Отправлено: 02 Ноября, 2011 — 12:27:51

Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007
Откуда: Berlin

Помог: 707 раз(а)

snikers987 пишет:
Может я чегото не догоняю, но как по середине?

Посередине не подразумевает буквальный смысл. Имеется ввиду что не должно быть ситуации, когда ошибка времени выполнения (Run-time error) прерывает исполнение скрипта. Все ошибки должны быть обрабатываемы, скрипт должен завершать работу штатно во всех случаях (про исключения я уже говорил выше).
Значит, в тот момент, когда Вы будете реализовывать, разворачивать реальную продакшн-систему — Вы задумаетесь о Fatal в скриптах и об обработке исключений. А до тех пор, видимо — да, Вы, полагаю, останетесь при своем мнении.

——
Есть в мире две бесконечные вещи — это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.

Отправлено: 02 Ноября, 2011 — 12:34:23

Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011
Откуда: Крым

Помог: 25 раз(а)

Возможно, но в каких случаях целесообразнее использовать require?

——
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё.

Отправлено: 02 Ноября, 2011 — 12:36:32

Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007
Откуда: Berlin

Помог: 707 раз(а)

Чтобы не быть голословным, реализуйте с помощью require скрипт, который в любом случае отработает корректно. Уточню — если все штатно, показать страницу «файл подключился, логика отработала», если произошла ошибка — показать страницу «временные технические сбои». Пользователь не должен увидеть 500-ю ошибку/белый экран/сообщение в виде Fatal error
Для начала эта простая задача (т.к. отображение надписи о сбоях хоть и лучше чем прямая ошибка, но все же так же «полезно» для пользователя)
(Добавление)

http://php.su/functions/?include пишет:

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

— то есть по сути мы можем использовать require когда мы на 100% уверены, что код подключится (файл существует/доступен для чтения и т.п.)

——
Есть в мире две бесконечные вещи — это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.

Отправлено: 02 Ноября, 2011 — 12:49:57

Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011
Откуда: Крым

Помог: 25 раз(а)

Ну пришли к тому что я писал, core.php не подключается динамически, он должен быть всегда доступен. По этому require_once «core.php»; лучше, так как не снижает скорось выполнения.

——
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё.

Как вызвать функцию в php из другого файла

Собственно, как вызвать функцию из другого модуля/файла?
n = modul2.Season(1,2,3,4)

Порылся в инете, не нахожу, только для процедуры нашел.
Do MyProc with 3.14 in MyProcFile
Может кто помнит как это делается.

там как-то надо было файл подключить, а потом можно вызывать, как-будто они локально описаны
SET PROCEDURE TO <имя PRG-файла (без prg)>
одновременно может быть подключен только один файл
FoxPro 2.5 ещё жив? Последний раз с ним сталкивался году в 2003. Больше живым я его не видел.
(0)Он еще жив?
Немедленно переводить на 8.2!
в что? классная СУБД была. RAD там весьма продвинутый для своего времени

В заголовке Modul2 пишутся такие строки
parameters m._
if type(«m._»)=»C»
Return eval(m._)
endif

Procedure Season
Parameters m._1, m._2 .

Вызывается как n=Modul2(«Season(1,2,3,4»)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *