1

しばらくの間gettype();、変数のキャスト型を動的に取得するために: を使用してきました。

function Type ($Value = null){
 return gettype($Value);
}


echo Type(array()); // Echo array
echo Type (1); // Echo integer
echo Type(1.2); // echo doubble

一方、私は、従来の文字列よりも検証しやすいと思われる、一般的で既知の整数表現を持つ方法を探しています。

誰にもこれに対する可能な解決策はありますか?

私はこのようなものを持っています:

function Type ($Value = null){
 $Type = gettype($Value);
 if ($Type === "array"){
   return 1;
 }elseif ($Type === "integer"){
   return 2;
 }
 // ...

}

この方法で作業は完了しますが、見栄えが悪く、コードに関しては私は一種のクリーンフリークです...もっと優雅に見えるものはありますか?

4

3 に答える 3

3

これはどう:

function typeAsNumber( $var = null ) {

   $validTypes = array( "boolean", 
                        "integer", 
                        "double", 
                        "string", 
                        "array",  
                        "object", 
                        "resource", 
                        "NULL", 
                        "unknown type" 
                      );

   return array_search( gettype( $var ), $validTypes);

}
于 2013-08-10T23:27:40.557 に答える
2

あなたが言ったように、なぜあなたがこれをしたいのか分かりません..あなたはこの関数を使用していたので、返された結果の周りに明らかにコードを作成しました..そのような重要な関数を変更すると、複雑になる可能性があります.これには大量のコード構造の変更と簡単なAPIを作成する方法が含まれるため、更新をローリングするときは、継続性を維持することです..したがって、このコードが一般に公開されている場合、大幅な変更は人々にとって厄介なものになります( ) 別のバージョンにアップグレードします。

あなたも持っているなら..ここに私が書いたものがあります:

function Cast_Type ($Value = null){
    $Type = gettype($Value);
    switch ($Type){
        case "boolean":
            return 1;
            break;
        case "integer":
            return 2;
            break;
        case "double":
            return 3;
            break;
        case "string":
            return 4;
            break;
        case "array":
            return 5;
            break;
        case "object":
            return 6;
            break;
        case "resource":
            return 7;
            break;
        case "NULL":
            return 8;
            break;
        case "unknown type":
            return false;
            break;
    }
}

switchandメソッドを使用するとcase、ユーザーがコードを読みやすくなり、次のように戻り値を簡単に検証できますresource7

于 2013-08-10T23:28:37.620 に答える