本ツールではPHPソースの記述に以下の制限事項を設けています。
PHPタグは <?php ?>、<? ?>、<?= ?> を認識します。ASPタイプの<% %>や、<script language="php">には対応しません。またヒアドキュメントにも対応していません。
ソース中のコメントは全て削除されます。コメントとして有効なのは //、/* */、# の3つです。
class キーワードに続くクラス名、function キーワードに続く関数名、$に続く変数名、const キーワードに続く定数名を変換します。
ダブルクォーテーションで囲まれた文字列内に現れる変数名は変換されます。一方、シングルクォーテーションで囲まれた文字列内に現れる変数名は変換されません。
これは、ダブルクォーテーション内の変数はその変数値に変換されるのに対して、シングルクォーテーション内の変数は値に変換されず変数名がそのまま文字列として扱われるというPHPの仕様に準じています。
__(アンダースコア2つ)で始まる変数や関数は変換しません。「__」で始まる名前はPHPで予約済みであり、ユーザーが定義しないよう推奨されています。
以下の変数名は変換しません。
$GLOBALS $_SERVER $_GET $_POST $_FILES $_REQUEST $_SESSION $_ENV $_COOKIE $php_errormsg $HTTP_RAW_POST_DATA $http_response_header $argc $argv $this
$$var のような可変変数には対応していません。以下のようなコードでは変数$hogeが変換されてしまうので正しく動作しません。
$var = "hoge"; $$var = "hello"; // $hogeに値を代入しているが・・・ echo $hoge; // この$hogeは他の名前に変換される
$func() のような可変関数には対応していません。以下のようなコードでは関数hoge()が変換されてしまうので正しく動作しません。
$func = "hoge"; $func(); // 関数hoge()をコールしているが・・・ function hoge() {・・・// このhogeは他の名前に変換される
__get() や __set() などのオーバーロードには対応していません。以下のようなコードでは変数$hogeが変換されてしまうので正しく動作しません。
class Foo { private $hoge; // この$hogeは他の名前に変換される function __get($name) { if($name == "hoge") { // hogeという名前ではアクセスされない return $this->hoge; } } } $foo = new Foo(); echo $foo->hoge; // このhogeは他の名前に変換される
同じ名前の変数や関数は同じ名前に変換されます。この事は、PHPに用意されている既存の変数や関数を使用していて、かつそれと同名のユーザー定義の変数や関数がある場合に問題になります。
以下のコードではExceptionクラスのgetCode()とFooクラスのgetCode()が同名の為、ExceptionのgetCode()が意図せず変換されてしまいます。このような場合、Fooクラスの方の関数を getFooCode()のようにあらかじめ別の名前にしておく事により問題を回避して下さい。
class Foo { function getCode() { // このgetCode()は変換されるが・・・ try { doSomething(); } catch(Exception $e) { echo $e->getCode(); // このgetCode()も意図せず変換されてしまう } } }