これはすぐに意見の問題になるかもしれませんが、私は緩いタイピングがバグの発生の可能性を増やすと感じています。適切である場合もありますが、一般的には、信頼性と保守性が必要なコード(「柔軟性」を超える可能性があります)では厳密な型指定が安全です。
PHP 5.0の時点で、あなたは型ヒントとして、クラスやインタフェースの名前を使用することができ、またはself
::、することができますPHP 5.1のよう
<?php
function testFunction(User $user) {
// `$user` must be a User() object.
}
PHP 5は、 "タイプヒンティング" を持っていますまた、タイプのヒントとしてarray
を使用します。
<?php
function getSortedArray(array $array) {
// $user must be an array
}
PHP 5.4は、機能/閉鎖のためのcallable
を追加します。
<?php
function openWithCallback(callable $callback) {
// $callback must be an callable/function
}
、PHP 7.0のようにスカラー型は(int
、string
、bool
、float
)も同様に使用することができる:PHP 7のよう
<?php
function addToLedger(string $item, int $quantity, bool $confirmed, float $price) {
...
}
、これは現在Type Declaration呼ばれます。
PHP 7では、Return Type Declarationsも導入されており、関数が返す型を指定することができます。この関数はfloat
を返す必要があります。
<?php
function sum($a, $b): float {
return $a + $b;
}
あなたが利用可能なタイプのヒントを使用し、適切なPHPDoc documentationで、残りのギャップを埋めることができ、PHP7を使用していない場合:
<?php
/**
* Generates a random string of the specified length, composed of upper-
* and lower-case letters and numbers.
*
* @param int $length Number of characters to return.
* @return string Random string of $length characters.
*/
public function generateRandomString($length)
{
// ...
return $randomString;
}
多くのエディタがこれらのコメントを解析し、不適切な入力について警告します(たとえば、PHPStorm)。
関数foo(array $ bar){// $ barは配列} – vijaykumar
@vijaykumarに関数を追加できますが、これはPHP 7でのみ正しく動作しますか? – Jurik
タイプチェックは、さまざまな理由からうまくいきます。また、手動ではなくインタープリタを使用して、いつでも最高の状態にすることができます。しかし、コードは、強い型付けよりも混合変数でより洗練されたものになる場合が常に存在します。 – Kittsil