私の
プロジェクトでは、さまざまなバージョンのソースを収集する必要がありました。 さらに、異なるコードが異なるアセンブリに収まるようにします。 if-elseは、コードが正確に入力するかアセンブリに入力しないかのどちらかが必要だったため、ここでは私には向いていませんでした。
解決策
そこで、#ifdef /#endifディレクティブを使用することにしました。 それらを実装するために、これらのディレクティブを処理する小さなプログラムをC#で作成しました。 プログラムでは、ソースファイルまたはフォルダー、および完成した結果を保存するフォルダーを指定する必要があります。 ディレクティブについてはphpファイルのみが処理され、残りは単純にコピーされます。
プログラム作業
プログラムには、3番目のフィールドから作成されるグローバル配列定義があります(「定義(コンマ区切り)」)。 この配列は、PHPコードの「#define TEXT」ディレクティブで補足できます。
プログラムは、「#ifdef TEXT」、「#ifndef TEXT」のディレクティブを処理できます。 ディレクティブが定義されている場合は最初のコードが含まれ、定義されていない場合は2番目のコードが含まれます。 これらのディレクティブには、閉じる「#endif」が必要です。
また、プログラムはこれらのディレクティブの#elseおよびネストを処理できます。
おわりに
PHPシンボル「#」はコメントを定義するため、これらのディレクティブをカットせずにコードを実行できます。
ただし、同じデータで異なるアクションを実行するコードで「#ifdef-#else-#endif」を使用する場合は、これらのアクションのいずれかをコメントアウトして、ほぼ次の方法でディレクティブをカットせずに実行する必要があります。
<?php
#ifdef COPY
$chat_page = new View('copy');
$chat_page->SetVars(array('copyright' => $this->Copyright()));
$this->html = $chat_page->Get();
$this->Display();
/*#else
$this->html = View('no_copy')::Call();
$this->Display();
*/#endif
?>
ここからプログラムをダウンロードできます:
phpifdef.googlecode.com/files/Php%20Ifdef%20Collector.exeプログラムソースはこちら:
code.google.com/p/phpifdef