私は古いPHPプロジェクトの管理に取り組んでいます。 PHPプロジェクトはKohanaフレームワークを使用しています。私はPHP開発者のためのEclipse Oxygenをインストールし、それらのPHPコードを含むPHPプロジェクトを作成しました。しかし、私は、Eclipse OxygenがKohanaフレームワークによって自動ロードされたクラスへの参照を解決できないために、数多くのエラーを検出することを発見しました。 KohanaはPHPのオートローディング機能を利用してクラス名を変更するためです。たとえば、common.php
にcommon_Core
というクラスがあります。 Kohanaはクラスをオートロードし、クラス名をcommon
に変更しました。 common.phpのでEclipseはKohanaフレームワーク(PHPフレームワーク)によってオートロードされたクラスを解決できません
:client.php
で
class common_Core {
public static function myFunc1() {
. . .
}
}
、我々は名前だけcommon
でこのクラスを参照します。解決とcommon_Core
に変更することが示唆されていて
$result = common::myFunc1();
Eclipseの酸素はcommon
をマークします。他のEclipseバージョン(Mars、Neon)ではそれらをエラーとしてマークしませんが、Ctrlキーを押しながらクリックするとそのメソッドにジャンプすることはできません。誰か独自のクラスを読み込むためにKohanaフレームワークのオートロード機能を使用していますか?あなたのクラスを解決するにはどうすればよいですか?
前述したように、これは古いプロジェクトで、たくさんのPHPコードが含まれています。したがって、すべての参照をcommon::
からcommon_Core::
に変更することは、おそらく良い解決策ではありません。
P.S.私はちょうどcommon_Core
からcommon
にクラス名を変更する考えがあり、それはEclipseの問題を修正するようです。しかし、ネームスペースを使用しない限り、クラス名が他のライブラリと競合する危険性もあります。この古いPHPプロジェクトは名前空間を使用しません。とにかく、EclipseがKohanaフレームワークを使ってPHPプロジェクトと連携する方法があるかどうかを知りたがっています。
はあなたのフィードバックをいただき、ありがとうございます。あなたのコメントで述べたKohanaのマニュアルを読みましたが、class "common_Core"を "common ::"と "email_Core"クラスでどのように参照できるか分かりません。 "email ::"で参照できます。私はこの古いPHPプロジェクトとKohanaフレームワークそれでもコード構造を理解しようとする。しかし、このコードは長年にわたって生産されてきました。したがって、その参照が機能しなければなりません。たぶん、元の開発者はクラス名エイリアスをどこかに行ったでしょう。もっと深く掘り下げて報告する。しかし、私の直感は、それがKohanaフレームワークに関連していなければならないということです。 – Raymond
ええ、Kohanaのオートローダーはかなり簡単ですが、開発者が何らかの '__callStatic()'を実行した可能性は非常に高いです。プロジェクトを見ずに、私はより良い方向を与えることができませんでした... – Rasclatt
私はコードのトレースを行い、最終的になぜか分かりました。 system/core/Kohana.phpでは、コードロジックは "common extends common_Core {}"という文字列を保持する変数を作成します。次に、eval()メソッドを使用してこの変数を出力します。したがって、 "common_Core"から拡張されたこの "共通"クラス定義を動的に作成します。 eval()行の上のコメントは次のように述べています: "透明なクラス拡張はevalを使って処理されます。これは嫌なハックですが、それは仕事を終わらせます。" IMHO、この種のクラスエイリアスは悪い習慣です。これで、実行時にその行を解釈するまで、Eclipse IDEはクラス定義を持ちません。 – Raymond