Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Cannot redeclare class & require_once
 
 автор: ADmexture   (05.03.2010 в 09:16)   письмо автору
 
 

Здравствуйте.

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


В поиске был. Похожего не нашел.
Помогите пожалуйста)

  Ответить  
 
 автор: buldovsky   (05.03.2010 в 09:51)   письмо автору
 
   для: ADmexture   (05.03.2010 в 09:16)
 

Вы описали нормальное поведение php. В двух файлах происходит по 1 подключению файла.

Вообще, полезно классы хранить в отдельной папочке, и использовать функцию __autoload
А в теле функции подключать файл класса (если он есть) из этой папочки.
В этом случае повторное объявление класса невозможно.

  Ответить  
 
 автор: ADmexture   (05.03.2010 в 11:00)   письмо автору
 
   для: buldovsky   (05.03.2010 в 09:51)
 

function __autoload($InvalidArgumentException)
{
    require_once("errors.inc");
}


Классы в отдельных папках (include_path) Ошибка не ушла). Может что то не так написал?

  Ответить  
 
 автор: buldovsky   (05.03.2010 в 13:11)   письмо автору
 
   для: 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>");

}
?>


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

  Ответить  
 
 автор: ADmexture   (05.03.2010 в 15:58)   письмо автору
 
   для: buldovsky   (05.03.2010 в 13:11)
 

Спасибо.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования