2017-08-31 66 views
0

我在PHP中關注的內容是class關鍵字只能用於創建PHP類。帶範圍關鍵字的PHP作用域解析運算符:: class

但是我已經看到,在一些框架如ZEND中,他們在其他地方使用它,如AlbumController::class

那麼爲什麼它是這樣使用的,這個概念的名稱是什麼?

爲例:

return [ 
    'controllers' => [ 
     'factories' => [ 
      Controller\AlbumController::class => InvokableFactory::class, 
     ], 
    ], 

回答

0
+0

不,先生我不是問範圍解析運營商IM詢問使用class關鍵字與該範圍解析操作方式 –

+0

我的不好,更新以更好地反映這個問題。 – neuromatter

+0

你是我的英雄,非常感謝我搜索了很多,但無法找到結果,因爲我不知道這個概念 –

1

我相信這個概念被稱爲類名稱解析。您給出的示例用法看起來非常像依賴注入容器的定義。

使用DI容器,您可以以陣列格式列出您的定義,就像您提供的代碼一樣,然後當您需要定義的類時,所有注射都會自動解析。

例如,假設你有以下定義一個DI容器:

$containerDefinitions = [ 
    Database\DatabaseAccessorInterface::class => Database\ConcreteDatabaseAccessor::class, 
    Data\QueryExecutionHandlerInterface::class => Data\ConcreteQueryExeuctionHandler::class 
]; 

...然後你有一個像這樣定義的類ConcreteQueryExeuctionHandler構造:

public function __construct(DatabaseAccessorInterface $databaseAccessor) 
{ 
    $this->databaseAccessor = $databaseAccessor; 
} 

...好吧,當您從DI容器中檢索定義QueryExecutionHandlerInterface時,使用類似下面的內容:

$queryExecutionHandler = $container->get(Data\QueryExecutionHandlerInterface::class); 

...然後它會在ConcreteQueryExecutionHandler的施工期間自動注入ConcreteDatabaseAccessor

這是一個非常具體的例子,但我相信你提供的代碼是一個DI容器定義數組。

0

這是類名解析。它有助於獲取完全限定的類名,特別是用於獲取名稱空間的類。

在zend框架中,我們看到namespace用於平凡的目的。使用類名解析有助於獲取類名和名稱空間。

例如:

namespace SOMENAME { 
    class ClassName { 
     //some implementation 
    } 

    echo ClassName::class; 
} 

意志輸出:

SOMENAME\ClassName