Вызов функции другого файла
Задача в файле из другого раздела, запустить выполнение одной из функций, чтобы в последствии добиться вывода уведомления.
Итак, подключаем в нужном нам файле файл с функциями уведомлений:
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»)