2

重複の可能性:
クラス プロパティを持つデフォルトのメソッド引数?

私は再帰関数を書いていますが、使いやすさのために、関数の最初の呼び出しでデフォルトの引数を受け入れたいと思っています。この値は、オブジェクト メンバー変数のアドレスである必要があります。以下の完全なコードを参照してください。

class Test{
    public $hierarchy = array( );
    public function addPath( $path, &$hierarchy ){
        $dirs = explode( '/', $path );
        if( count( $dirs ) == 1 ){
            if( is_dir( $path ) )
                $hierarchy[ $dirs[ 0 ] ] = '';
            else
                $hierarchy[ $path ] = '';
            return $hierarchy;
        }
        $pop = array_shift( $dirs );
        $hierarchy[ $pop ] = $this->addPath( 
            implode( '/', $dirs ), $hirearchy[ $pop ] );

        return $hierarchy;
    }
}

$t = new Test( );
$t->addPath( '_inc/test/sgsg', $t->hierarchy );
print_r( $t->hierarchy );

さて、ここで理想的にやりたいことは、デフォルト値を追加することです:

public function addPath( $path, &$hierarchy = $this->hierarchy ){

次のように呼び出すことができます。

$t->addPath( '_inc/test/sgsg' );

しかし、これにより次のエラーが発生します。

Parse error: syntax error, unexpected '$this' (T_VARIABLE) in tst.php on line 9

私はいくつかのことを試してきましたが、成功しませんでした。これを達成する方法はありますか?

4

1 に答える 1

2

残念ながら、これを行うことはできません。パーサーは、関数定義内の変数の解決に対応していません (できません!)。

ただし、定義で関数を定義し、値が渡されたかどうかを確認するために&$hierarchy = null使用できます。is_null(参照される値が null になる場合を除き、別の回避策が必要になります)

true を返す場合is_nullは、割り当てることができます$hierarchy = &$this->hierarchy


PHP チャットで簡単に議論した後、func_num_args()ここで を使用すると便利な場合があります。デフォルトが入力された引数はカウントされないためnull、参照によって含まれる変数を安全に渡すことができ、この関数を使用して$hierarchy、渡されたパラメーターからの値か、デフォルトによる値かを判断できます。(@NikiC に感謝)

于 2012-10-01T16:10:12.590 に答える