3

.net アプリケーションで使用しようとしている 3 つの php クラスがあります。Phalanger を使用してこれら 3 つのクラスを取得し、次のコマンドを使用して .dll ファイルを作成しました。

phpc /target:dll Client.php Crypt.php Exception.php

もちろん、Client.dllとClient.pdbファイルを出力しました。

そこから VS2012 に移動し、新しい asp.net アプリケーションを作成し、Client.dll を参照として追加しました。ただし、どのクラスのパブリック メソッドも表示されず、オブジェクト ブラウザ ウィンドウに次のように表示されます。

Client>Client>Base Types>Object (オブジェクト型のメソッドのみを持つように)

カスタムインターフェイスをオブジェクトにキャストすることを含むこのメソッド/チュートリアルを試してみましたが、エラーが発生しました:

タイプまたは名前空間の名前 ScriptContext が見つかりませんでした

これはもちろん、何がどこで ScriptContext なのかがわからないことを意味します。ただし、このチュートリアルは2007年のものなので、時代遅れなのか、それともそのクラスをどこから入手すればよいのかわかりません。

私が見つけた他のチュートリアルも同じくらい古いものです。それは言います:

既存の PHP ソース (標準インタープリター用に開発されたもの) を変更せずに使用する場合は、レガシー モードを使用する必要がありますが、新しい PHP プロジェクトを開発する場合は、ピュア モードの使用を検討できます。

しかし、ドキュメント内にレガシーモードの手順が見つからず、「純粋な」モードを試すよりもそれを好むでしょう(既存のphpコードを変更/編集する必要がないように)。(ピュアモード)試してみましたが、上記のコマンド(DynamicObject.phpクラスをコマンドに追加)でコンパイル(phalangerコンパイル)しませんでした。

PHP クラス内のパブリック メソッドにアクセスするにはどうすればよいですか?

4

1 に答える 1

1
phpc /target:dll Client.php Crypt.php Exception.php

レガシー (標準) モードで DLL を作成します。この DLL には、PHP セマンティクスとの互換性に必要な「奇妙な」名前空間が含まれています。(これらの名前空間は、異なるスクリプト ファイルからコードを分離します)。Phalanger 3.0ブログ投稿の .NET 相互運用性の概要では、標準モードでコンパイルされたスクリプトの使用方法について説明しています。

コマンド ライン オプション/pure+は、いわゆるピュア モード アセンブリを作成するようにコンパイラに指示します。このモードでは、コンパイラはすべてのソース ファイルを連結し、変な名前空間なしで (C# のように) 1 つにコンパイルします。PHP クラス宣言の上に属性を指定する[\Export]と、結果の DLL は C# コードからコンパイルされたように見え、それを参照してそのクラスを通常どおり使用できます。

于 2012-10-12T15:39:34.333 に答える