2011-08-16 8 views
6

Emacsユーザとして、私がPDTのような "最新の"エディタについて羨望するのは、PDTが型を理解することだけであり、PHPDocの "型ヒント"もそうです。PHPインタープリタはPHPDocタイプのヒントを認識できますか?

/** 
    * @param DateTime $date 
    * @param string $name 
    * @return DOMDocument 
    */ 

どこに私ができる現在、私は、私は、パラメータの型が間違って取得する場合、PHPインタプリタが私を警告するためにタイプのヒントを使用しますが、パラメータがオブジェクトである場合ということにのみ動作します。さらに重要なことに、関数の戻り値が特定の型であることを保証する方法はありません。

これは長いことかもしれませんが、PDTと同じ方法でPHPインタプリタにPHPDocコメントを知らせるためのプラグインやその他の方法がありますか?理想的には、間違った型の値を返すか、パラメータをintとして宣言した文字列を渡すと、致命的なエラーが発生します。

+0

質問と同様ですが、私の知る限り、答えは不可能です。 – MitMaro

+2

PHPは意図的に動的に弱く型付けされているため、型を強制しようとするとうまくいくことはありません。 – erisco

+2

[PHPLint](http://www.icosaedro.it/phplint/)をチェックしてください – shesek

答えて

1

いいえ、PHPは明示的な型宣言または型ヒントをサポートしていません。type jugglingの使用は明示的にPHPインタープリタの一部です。型ヒントのdocumentsでは、オブジェクト型と配列型のヒントのみがサポートされています。

つまり、タイトなタイプの要件を持つ関数があれば、関数の開始時にそれらの引数を検証することが不可欠になります。 PHPの型に非常に慣れている場合は、a)型付き言語(heh)に切り替えるか、b)オートボクシング/オブジェクトラッパーパターンを使用するかのいずれかができます。 (すなわちis_string)があり、これに重大なパフォーマンスペナルティがあるが、代わりにタイプのためにプリミティブチェックを使用しての、あなたがラッパークラスを作成することができますし、タイプヒンティングを使用:あなたが見ることができるように

class StringWrapper { 
    public $value = null; 
    function __construct($val) { 
    $this->value = $val; 
    } 

} 

function requires_a_string(StringWrapper $string_value) { 
echo $string_value->value; 
} 

$string = new StringWrapper('Hello world!'); 

を、それはかなり大きな丘です

function requires_a_string($string_value='') { 
if (!is_string($string_value)) 
    return false; 
echo $string_value; 
} 

私の判決は:それほど価値はない:(それぞれのタイプのラッパーを作成して)登ること。

あなたはここにオートボクシングにいくつかの続きを読むことができます。またhttp://php.webtutor.pl/en/2011/04/13/strong-data-typing-in-php-part-ii-autoboxing-and-indestructable-objects-english-version/ は、オートボクシングのために、このRFCに注意してください。https://wiki.php.net/rfc/autoboxingそれはしかし、しばらくの間、周りされているので、私はそれのために保持していないでしょう。

+0

はい、いいえ、私はその丘を登ることも望んでいません。だからこそ私は、自分の手に長すぎる人が、このようなことを自動的に行うプラグインまたはモジュールを書いてくれることを望んでいたのです。そのように見えません... –

2

SplTypesの拡張子を調べてください(注意:実験的です)。これは、 "プリミティブ"の型ヒントを可能にします(私は彼らが想像できるあらゆる方法でプリミティブより優れていると聞きました)。

インタプリタを他の方法で作成することはできませんが、読者のための練習として残しておきたい迷惑な回避策はありません。

+0

この拡張機能は実験的なもので、いつでもドロップすることができ、かなりのオーバーヘッドがあります。さらに、これは真の型付けではなく、オブジェクトラッピングの実装です。 –

+0

それは潜在的に興味深いですが、私は構文の大ファンではないことを認めなければなりませんが、$ int = new SplInt(94);しかし、PECL演算子のオーバーロードパッケージと一緒に、これは1つの回避策になる可能性があります。 –

+0

@Chrisありがとうございました。私は忘れてしまった(私はそれを自分で使用しない、私はちょうどそれがクールだと思う)。 – cwallenpoole

0

それはスカラー型のためのヒンティングのタイプを作るためにどのように大きな議論だった:

  • 強く(タイプA intへの「123」をobiviosすなわちあれば、それを両立させるようにしてください常に
  • それを両立させるために
  • トライをチェック123)ではなく「123aaaは」intに(123)

しかし、私の知る限り、今開発ソリューションは、すべての

でスカラー型ヒントを使用しないように知っているように

PHP manual
タイプヒントは、オブジェクトと配列(PHP 5.1以降)のタイプのみが可能です。 int型とstring型の伝統的な型ヒントはサポートされていません。