Построить объект путем косвенной ссылки на переменную в пространствах имен

Я хочу, чтобы 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;    } }
?>

0

Решение

Наконец-то я нашел похожий пример, но прошло некоторое время, пока я его на самом деле не получил:

Фактическая уловка использует двойные кавычки: >> «<<
И двойной слеш >> \<<
И это не работает с псевдонимом, созданным как

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();?>
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]