2014-12-20 301 views
0

欲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

嗯,這是第一,我從來沒有見過用於類名可變的變量。從錯誤表明,PHP似乎逃避了\角色。 – sjagr

+0

這將需要一些時間來提供一個完整的樣本。 –

+0

可能明天。 21 –

回答

0

我終於找到了一個類似的例子,但過了好一會兒,直到我真正明白了:

實際的訣竅就是使用雙引號:>>」 < < 和雙斜槓>> \ < < ,它不會與像

use hy_soft\qimanfaya\testarea\articles as article; 

創建你必須完全使用別名工作合格的類名稱(FQCN)

$ArticleLoader = "\\hy_soft\\qimanfaya\\testarea\articles\\excursions_list_item"; 

我仍然apreciate任何建議如何做一個別名。謝謝。

工作例如: 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(); 


?>