忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2017/03/27 19:36 |
PHP1-69:タイプヒンティング

Javaではメソッドの引数に必ず引数の型を指定する必要がありますが、PHPでもPHP5以降、関数とメソッドに対して引数の型を指定することが出来ます。
これによりメソッド呼び出しの時点で不正な呼び出しをチェックすることができ、メソッドの頭に毎回引数チェックを書く必要がなくなります。

ただ、最初に最大の問題点を挙げておくと、タイプヒンティングの指定がarray型とObject型しか使えないということです。
どうしてfunction func(string $str)ってできないんだよ……

とりあえず簡単な例。

hinting_test.php  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
    
    //適当なクラス
    class hinting_test{
        function hinting_array(array $arr){
            return true;
        }
    }
    
    //引数
        $arg1=array('1','2');
        $arg2='1,2';
    
    $hint=new hinting_test();
    
    $hint->hinting_array($arg1);
//    $hint->hinting_array($arg2);    //ここでCatchable fatal error発生


hinting_test::hinting_array()の引数にarrayを指定しているため、array以外の引数を渡すとエラーが発生します。
どうしてExceptionじゃないのかは謎ですが、これでJavaのように引数レベルで型を制御することができます。
ただしJavaで言うところのオーバーロードは使用できません。
function hinting_array(array $arr){}
function hinting_array(object $arr){}

と書くとredeclareエラーになります。

まったくもってどうでもいいんですが、長い間「タイプヒンディング」だと思っていました。
謎。
 

 

PR


2009/04/21 12:53 | Comments(0) | TrackBack(0) | PHP

トラックバック

トラックバックURL:

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<PHP1-70:リフレクション | HOME | PHP1-68:オブジェクトに配列でアクセスするしつこく続き>>
忍者ブログ[PR]