2017-08-20 41 views
0

我們想爲我們的項目創建一個名爲Memcached的模塊。這樣我們就可以使用命名空間服務(例如Memcached\Service\Get),它們使用php的安裝Memcached類執行操作。,模塊名稱是否與類名相同?

然而,我們注意到在zendframework/zend-modulemanager/src/Listener/ModuleResolverListener.php

if (class_exists($moduleName)) { 
    return new $moduleName; 
} 

以下行這意味着,如果我們命名我們的模塊Memcached,然後加載模塊是行不通的。該模塊將被實例化爲Memcached對象,而不是所需的Memcached\Module對象。

那麼,有沒有什麼辦法可以簡單地命名我們的模塊Memcached?或者,我們是否需要更具創造性,並將我們的模塊命名爲MemcachedModule?我們寧願不去做後者,因爲我們其他的模塊都沒有這個Module後綴。

回答

0

Zend Framework 3已被修補,因此可以將模塊命名爲與現有類相同。下面的代碼添加到ModuleResolverListener

$class = sprintf('%s\Module', $moduleName); 
if (class_exists($class)) { 
    return new $class; 
} 

所以現在,例如,我們可以創建自己的Zend模塊調用Memcached\Module,不會與內置的Memcached類PHP的衝突。

For more info,view the patch on GitHub

-1

模塊是Zend使用PHP類編寫的東西。你不能有兩個具有相同名稱的類,所以你也不能導入具有相同名稱的「模塊類」和「自己的類」,但只有在一個名稱空間中工作時才相關。您可以通過完整名稱空間訪問類。這裏是一些例子。

<?php 
namespace my\space; 

class TheOne { 
    function __construct() { 
     print "my one created\n"; 
    } 
} 

namespace other\space; 
use my\space\TheOne as MyOne; 

class TheOne { 
    function __construct() { 
     print "other one created\n"; 
    } 
} 

new TheOne(); //other one created 
new MyOne(); //my one created 
相關問題