|
|
|
| Здравствуйте.
one.php подключает, с помощью require_once, файл errors.inc, в котором содержаться классы об ошибках, и файл work.inc, которой соответственно подключает errors.inc так же.
Хоть и используется require_once, все равно пишет, что класс в errors.inc не может подключаться дважды. Хотя нигде кроме errors.inc, этот класс не подключается.
Fatal error: Cannot redeclare class InvalidArgumentException in C:\php\includes\errors.inc on line 9
|
В поиске был. Похожего не нашел.
Помогите пожалуйста) | |
|
|
|
|
|
|
|
для: ADmexture
(05.03.2010 в 09:16)
| | Вы описали нормальное поведение php. В двух файлах происходит по 1 подключению файла.
Вообще, полезно классы хранить в отдельной папочке, и использовать функцию __autoload
А в теле функции подключать файл класса (если он есть) из этой папочки.
В этом случае повторное объявление класса невозможно. | |
|
|
|
|
|
|
|
для: buldovsky
(05.03.2010 в 09:51)
| |
function __autoload($InvalidArgumentException)
{
require_once("errors.inc");
}
|
Классы в отдельных папках (include_path) Ошибка не ушла). Может что то не так написал? | |
|
|
|
|
|
|
|
для: ADmexture
(05.03.2010 в 11:00)
| | __autoload запускается когда создается экземпляр несуществующего класса
например $error = new Error();
Если класс Error не объявлен, то запустится __autoload с аргументом "Error"
Эта функция найдет файлик с названием Error.php в папочке и прочитает его.
<?php
// Функция запустится если вызовут экземпляр несуществующего класса
function __autoload($class_name){
$file_name = $_SERVER['DOCUMENT_ROOT']."/classes/$class_name.php";
if(file_exists($file_name)) require_once ($file_name);
else exit("<p>Ошибка. Неизвестный класс $class_name.</p>");
}
?>
|
Таким образом, с помощью этой функции не нужно подключать файлы классов самостоятельно, а просто создавать экземпляры где угодно и сколько угодно. Класс определится автоматически (если файл с его именем существует) | |
|
|
|
|
|
|
|
для: buldovsky
(05.03.2010 в 13:11)
| | Спасибо. | |
|
|
|