PHP 7では、関数引数に(プリミティブでも)タイプ指定できるようになりました。
PHP Manual, "Function arguments - Type declarations":
今までは、、
-----(ここから)-----
function doSomething($a, $b) {...
-----(ここまで)-----
これからは、、
-----(ここから)-----
function doSomething(string $a, int $b) {...
-----(ここまで)-----
と書けます。
整数は`int`、
ブーリアンは`bool`、
と書きます。
なお、Classと`array`については、PHP 5で既にタイプ指定可能でしたのです。
◇
動作を試しました。
※リンク先にてコードを確認してください。
デフォルトでは、string←→数値の暗黙キャストが実施され、それで引き渡せるなら、一見タイプ違いだったとしても結局エラーになりません。よって、"abc"を数値系引数に引き渡したケース以外は全てパスしました。
文字列値"123"と数値123の違いをエラーにしたいときは、
-----(ここから)-----
declare(strict_types=1);
-----(ここまで)-----
を各ファイルの先頭に書きます。そのファイルでのみ有効です。
なお、この「strict_type」をglobalに設定することは出来ないとのことです。
strictモードの動作を見てみると、、
※リンク先にてコードを確認してください。
int値をfloat引数に引き渡すケースを除いて、全てエラーとなりました。数学的に、整数は小数(実数)の部分集合(≒即ち、サブクラス)であり、精度落ちも生じないので、int→floatのみstrictモードでもokとなるのでしょう。
◇
<追記>
関数の返り値にもタイプ指定できます。
-----(ここから)-----
function doSomething(string $a, int $b): string {...
-----(ここまで)-----
関数のプロトタイプの末尾に、コロンを置いてからタイプを記述します。(※なんで前置きにしなかったのでしょう。。もしくは引数の方も後置きにすれば。。)
◆以上