2009-08-04 9 views
11

これは正当なものですか?PHPの定数のデフォルト値として使用する

<?php 

function ftw($foo = 'pwnage', $nub = MENU_DEFAULT_VALUE, $odp = ODP_DEFAULT_VALUE) { 
     //lots_of_awesome_code 
} 

?> 

MENU_DEFAULT_VALUEODP_DEFAULT_VALUEファイルで以前に定義された定数です。

+2

ええ、私はこれを使用する機能に問題がありましたが、技術的には可能かもしれませんが、ベストプラクティスに対しては考えられませんでした。 –

答えて

18

はい、合法です。 the manualから

デフォルト値は、(例えば)定数 発現しない 変数、クラスメンバまたは関数 呼び出しでなければなりません。

定数はその請求書に完全に適合します。

+0

'' 'static'''を使って定数を参照することができないが、' '' self''を使って定数を参照することができない理由/文書は、クラスメソッドの引数のデフォルトを設定するときは? – Kamafeather

10

お試しください。

それでも、ちょうどあなたが今テストすることができる場合には、次のコード:

define('MENU_DEFAULT_VALUE', 10); 
define('ODP_DEFAULT_VALUE', 'hello'); 

function ftw($foo = 'pwnage', $nub = MENU_DEFAULT_VALUE, $odp = ODP_DEFAULT_VALUE) { 
    var_dump($foo); 
    var_dump($nub); 
    var_dump($odp); 
} 

ftw(); 

は、この出力を与える:

string 'pwnage' (length=6) 
int 10 
string 'hello' (length=5) 

だから私は、はい、それが有効である、と言うだろう: - )

+0

クラスメソッドの文脈では、 '' 'static'''を介して定数を参照することはできませんが、単に' 'self''''を使うことでわかりました。この '' myMethod($ arg1 = static :: MY_CONST) ''は動作しません。あなたはこの違った振る舞いの有効な説明を知っていますか? – Kamafeather

8

OOPコンテキストでは、デフォルトのメソッド引数値としてクラスメンバ定数を使用することもできます。

class MyClass 
{ 
    const A = 1; 

    public function __construct($arg = self::A) 
    { 
     echo $arg; 
    } 
} 
関連する問題