2012-03-28 14 views
3

親クラスでエイリアスと名前空間のクラスを使用していますが、子クラスでは使用できないようです。実際のエラーはオートローダからのものです。奇妙なことは、関数が親クラスで動作し、正常に読み込まれることです。 useでクラスをサブクラスで利用できるようにするにはどうすればよいですか?カスケードphpで子クラスを使用するネームスペース

編集:レシピはステートレスです - Baseでシングルトンを作成し、子クラスMyTestのメンバーとして参照するのは意味がありますか?

Base.phpという:

namespace selenium; 
use selenium\recipe\Cms as Cms; 
class Base extends \PHPUnit_Framework_TestCase 
{ 
    public function __construct() 
    { 
     Cms::staticfunc(); //works fine 
    } 
} 

MyTest.php:コメントから

class MyTest extends \selenium\Base 
{ 
    public testMyTest() 
    { 
     Cms::staticfunc(); //errors here 
    } 
} 
+0

は、あなたが追加してみました:あなたのパスが含まれている場合

さて、あなたはuseまたはrequire_once、使用例を呼び出す必要はありませんので、いつでもあなたは、それはあなたのために自動的にロードされますHobis_Api_*を参照し、正しく設定されています'セレニウム\ recipe \ Cms as Cms;'行を 'MyTest.php'にしますか? –

+0

はい、私はそれが私の仕事を理解しています、私は、20行ほどの子クラスの中でその行を複製せずに、カスケードする方法を望んでいました。 – tipu

答えて

2

は、私は2つのファイルを持っている私が望んでいた

20行ほどの間にその行を複製せずに使用をカスケードする方法c hildクラス

これはPHPネームスペースの最大の問題の1つで、現在のスクリプトにアクセスする必要があるすべてのファイルに対してuseと呼ぶ必要があります。 require_onceをスクリプトで必要なライブラリを呼び出すために20回呼び出す必要があったのと同じ状況です。

私のやりたいことは、ファイルの名前空間(Zend Frameworkのようにファイルシステム上にあるもの)であり、オートローダーを使って混乱を避けることです。私は現在フレームワークの外で使用できるZF autoloaderを使用するか、SplAutoloadを使用してバニラのPHP実装を使用することもできます。

- 更新 -

私はHobis_Apiとして名前空間され、過去数年にわたって書かれているライブラリを持っている、と同じ規則でファイルシステム上に位置しています。 〜/ projects/projects/dp/hobis/lib/Hobis/Api/*。 Zend_Loaderで名前空間を登録するために、私は次のようにします。

// Be sure to set the include path to include the Zend and Hobis_Api files 
// Not sure how your setup is, but would look something like: 
set_include_path(get_include_path() . ':' . DIRNAME(__FILE__)); 

require_once 'Zend/Loader/Autoloader.php'; 

$autoloader = Zend_Loader_Autoloader::getInstance(); 
$autoloader->registerNamespace(
    array(
     'Hobis_Api_' 
    ) 
); 

通常、上記のコードは、一度、オートローダーを登録するために、集中スクリプトから呼び出すことができますいくつかのブートストラップファイル、に行くだろう。

// SomeScript.php 

// Notice no requires 

// I can make a call to Hobis_Api_Image without error 
$image = Hobis_Api_Image; 
$image->setHeight(400); 
+0

あなたは、あなたが何を意味しているか、名前空間とオートリフレクターの使い方の例を挙げることができますか? – tipu

+0

もちろん...私はちょっと後でポストします。 –

関連する問題