Я хочу, чтобы PHP создавал объект путем косвенной ссылки на переменную в пространствах имен.
Это идет как:
$ArticleObjectIdentifier = 'qmdArticle\excursions_list_item';
$result = new $ArticleObjectIdentifier($parent_obj,$r);
Где qmdArticle — используемое пространство имен и excursions_list_item
это имя класса, которое обычно не жестко закодировано, а читается из БД.
Я получаю следующую ошибку — при использовании вышеуказанного:
Class 'qmdArticle\\excursions_list_item' not found in /media/work/www/mytestarea/control.php on line 1916 ...
index.php
<?php
namespace hy_soft\qimanfaya\testarea\main;
use hy_soft\qimanfaya\testarea\articles as article;
include_once('article.php');
$ArticleLoader = 'article\excursions_list_item';
$article = new $ArticleLoader();
$article->showcontent();?>
article.php
<?php namespace hy_soft\qimanfaya\testarea\articles
class excursions_list_item { private $content; function
__construct() {
$this->content = 'This is the article body';
// parent::__construct($parent,$dbrBaseRec);
}
public function showcontent() { echo $this->content; } }
?>
Наконец-то я нашел похожий пример, но прошло некоторое время, пока я его на самом деле не получил:
Фактическая уловка использует двойные кавычки: >> «<<
И двойной слеш >> \<<
И это не работает с псевдонимом, созданным как
use hy_soft\qimanfaya\testarea\articles as article;
Вы должны использовать полное имя класса (FQCN)
$ArticleLoader = "\\hy_soft\\qimanfaya\\testarea\articles\\excursions_list_item";
Я все равно буду благодарен за любой совет, как сделать это с псевдонимом. Благодарю.
Рабочий пример:
article.php
<?php
namespace hy_soft\qimanfaya\testarea\articles;
class excursions_list_item
{
private $content;
function __construct()
{
$this->content = 'This is the article body';
// parent::__construct($parent,$dbrBaseRec);
}
public function showcontent()
{
echo $this->content;
}
}
?>
index.php
<?php
namespace hy_soft\qimanfaya\testarea\main;
use hy_soft\qimanfaya\testarea\articles as article;
include_once('article.php');
$ArticleLoader = "\\hy_soft\\qimanfaya\\testarea\articles\\excursions_list_item";
//$ArticleLoader = "\\article\\excursions_list_item"; doesn't work
$article = new $ArticleLoader();
$article->showcontent();?>
Других решений пока нет …