2017-08-20 5 views
0

Memcachedというプロジェクト用のモジュールを作成します。このようにして、インストールされたPHPのMemcachedクラスを使用してアクションを実行する名前空間サービス(例:Memcached\Service\Get)を持つことができます。は、モジュール名をクラス名と同じにすることができますか?

はしかし、我々はこれが私達が私達のモジュールMemcachedに名前を付ける場合は、単に動作しませんモジュールをロードすることを意味zendframework/zend-modulemanager/src/Listener/ModuleResolverListener.php

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

の次の行に注目してください。モジュールは、Memcached\ModuleオブジェクトではなくMemcachedオブジェクトとしてインスタンス化されます。

だから、我々は単に私たちのモジュールMemcachedに名前を付けることができます任意の方法はありますか?または、私たちはもっと創造的で、モジュール名をMemcachedModuleのようにする必要がありますか?私たちは他のモジュールのどれもがこのModule接尾辞を持たないので、後者をしたくないです。

答えて

0

Zend Framework 3は、モジュールが既存のクラスと同じ名前になるようにパッチが適用されています。次のコードは、ModuleResolverListenerに追加されました:

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

をだから今、例えば、私たちは私たち自身のZendモジュールは、PHPのMemcachedクラスに建てられたと競合しないMemcached\Moduleと呼ば作成することができます。詳細情報については

view the patch on GitHub

-1

モジュールはPHPクラスを使用して書かれたZendです。同じ名前の2つのクラスを持つことはできないので、同じ名前の "module class"と "own class"をインポートすることはできませんが、これは1つの名前空間で作業している場合にのみ関係します。フルネームスペースでクラスにアクセスできます。ここにいくつかの例があります。

<?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 
関連する問題