2016-05-18 3 views
3

私は古いを維持していますZend 1.12アプリケーション。このアプリケーションにはDocument(application/models/Document.php)という名前の2つのクラスがあり、そのうちの1つは参照する必要がある一連の定数を保持しています。PHPで2つのクラスの名前が同じ場合に、希望する定数を参照する方法はありますか?

通常これはうまく動作します。しかし、あるヘルパー(library/App/Helper/Action/Docusign.php)では、なんらかの理由で別のDocumentクラス(library/Docusign/APIService.php)が参照されています。私は嫌になります。もちろん、必要な定数はありません。

定数の参照に使用するクラスを指定するにはどうすればよいですか?

$documentType = Document::DOCUMENT_TYPE_OTHER; 

Fatal error: Access to undeclared static property: Document::$DOCUMENT_TYPES in ...

私もなく、運様々な名前空間をいじり試みました。 Zendはそれを台無しにするために舞台裏で何かをしているようだ:P

私のために何かアドバイスはありますか?

+0

これらのクラスは名前空間にありますか? – TheDrot

+0

彼らはそうではありません。私が言ったように、tho、私はネームスペースを試してみて、無駄にそれらを分離しようとしました。例えば、私がかなりのバリエーションを試したにもかかわらず、モデルの名前空間を定義するときにモデルの名前空間を見つけることができないと主張しています。 – Logos

答えて

0

をすべてを引き裂くと、それは名前空間を使用するように再実行することなく、名前空間ベースのソリューションではありませんアプリ全体に適切に表示されます。

代わりに、明示的に区別を強制するために、クラス名の1つをDocumentからDocumentModelに変更してリファクタリングしました。

0

あなたが言うように、あなたがlibrary/Docusign/APIService.phpの一番上にこれを貼り、任意の他の名前空間を使用していない、場合:

<?php 
namespace Docusign; 

... 

次に、その別のクラスを参照するときに、このコードを使用します

$doc = new \Docusign\Document(); 
$documentType = Document::DOCUMENT_TYPE_OTHER; 

library/Docusign/APIService.php内の任意のオブジェクトコードが同様名前空間される必要があることに注意してください。あなたはそれを変更する必要があると思い

$date = new DateTime(); 

:あなたはこのような行があればそう

$date = new \DateTime(); 
+0

ライブラリ/ Docusign/APIService.phpは、実際には既にデフォルトで使用されています。私の質問では明らかではないかもしれません。アプリケーション/ models/Document.phpです。私は実際には既に、その戦略を無駄にしようとしました。Zendの自動ローダーのエラーは、クラスを見つけることができないと言っています。つまり、インクルードパス(アプリケーション/モデル)にあります。他のいくつかのリソースごとに、アプリケーションルートからの相対パスとして名前空間をエンコードしようとしましたが、同じ効果があります。 – Logos

関連する問題