[php5] forward declaration

elenangel

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

SomeTemplate.php:
require_once "TemplatedObject.php";
class SomeTemplate
{
var $id;
public function __construct
{
$id = 0;
}
public static function Load($id)
{
//загрузка по id из базы например
...
}
public static function CreateFromDTO($dto)
{
$r = new TemplatedObject;
$r->id = $dto->id;
...
return $r;
}
public function getTemplatedObjectsList
{
$r=array;
$tolist = DAOFactory::getTemplatedObjectDAO->queryByIdTemplatedObjectint)$this->id); // список объектов-структур с полями соответствующими полям таблицы
foreach($tolist as $to)
{
$r[] = TemplatedObject::CreateFromDTO($to);
}
return $r;
}
}

TemplatedObject.php:
require_once "SomeTemplate.php";
class TemplatedObject
{
var $id;
var $template_id;
public function __construct
{
}
public static function Load($id)
{
...
}
public static function CreateFromDTO($dto)
{
$r = new TemplatedObject;
$r->id = $dto->id;
$r->template_id = $dto->id_template;
...
return $r;
}
public function getTemplate
{
$dtotempl = DAOFactory::getSomeTemplateDAO->loadint)$this->template_id);
$templ = Template::CreateFromDTO($dtotempl);
return $templ;
}
}

bansek

чего-то ерунда какая-то
пхп сначала реализует все инклюды (тупой текстовой подгрузкой)
потом уже обрабатывает смысл
какая именно ошибка выкидывается и в каком именно случае

elenangel

вот когда он обрабатывает смысл, и оказывается, что один класс уже есть (обработан а второй только обрабатывается. поэтому во втором в порядке инклюда можно использовать первый, а наоборот - нельзя. ошибку сейчас не назову точно, попозже воспроизведу и напишу. насколько помню, создавался экземпляр совсем другого класса который уже был. (PHP Version 5.2.4, Linux 2.6.22.19-desktop-2mdv SMP Mon May 5 20:55:05 EDT 2008 i686)

elenangel

ошибку воспроизвести не удалось. :o простой пример двух классов которые используют один другого работает как надо. видимо где-то был еще косяк.
Оставить комментарий
Имя или ник:
Комментарий: