2012-02-14 40 views
4

私はこのような機能を持っています。関数で引数を渡すには?

function load($name, $arg1, $arg2, $arg3, $arg4){ 
    $this->$name = new $name($arg1, $arg2, $arg3, $arg4); 
} 

load()方法は、いくつかのクラスをロードし、クラスpropertyと無限の引数として設定し、それが割り当てられたクラスに依存します。私は3引数、この過程で何が起こるか

function load($name, $arg1, $arg2){ 
    $this->$name = new $name($arg1, $arg2); 
} 

そのような何かを行うことも可能であると方法$this->loadを設定した場合

別の例?

答えて

6

あなたはfunc_get_args()の組み合わせ、ReflectionClassやヘルプを使用することができますこのようなthis commentの:

function load(){ 
    $args = func_get_args(); 
    if(!count($args)){ 
     throw new Something(); 
    } 

    $name = array_shift($args); 
    $class = new ReflectionClass($name); 
    $this->$name = $class->newInstanceArgs($args); 
} 
+0

Splendid !!!、コードはきれいで効率的です。どうもありがとうございました... – GusDeCooL

2

あなたは、引数にデフォルト値を設定しない限り、関数が呼び出されたとき、あなたは値を渡す必要があります:

function load($name, $arg1, $arg2, $arg3, $arg4){ 
load('x'); // fails, didn't specify args 1->4 

が、デフォルトで:

function load($name, $arg1, $arg2 = null, $arg3 = null, $arg4 = null){ 
load('x', 'y'); // works, args 2->4 are optional 
load('x'); // fails, didn't specify arg1 
load('x', 'y', 'z'); // works, args 3->4 are null. 

他のオプションがあります - オプションで渡します配列内の引数または使用方法func_get_arg()

function load($name) { 

load('x', 'y', 'z') // not an error, use func_get_args/func_num_args to get the extras 
+0

私が達成したいことは、無限の議論をすることができます。 – GusDeCooL

+0

それは最後の選択肢でしょう。関数定義に必須の引数を指定し、func_get_args()を使用してすべての「無限」のエクストラに適用します。 –

3

より簡単なハンドラこれは、変数$argの配列を使用することです。動的に呼び出され、他のコンストラクタ(new $name())その後、同様に彼らの入力として配列を受け入れる必要があるでしょう、そしてあなたは、単にパラメータの配列を通過することができます。

// Params in an array 
$params = array(1,2,3,4,5); 

// Pass into the load() function 
function load($name, $params) { 
    // And pass them through to the dynamic constructor 
    $this->$name = new $name($params); 
} 
+0

番号。配列を使用することはできません。 '$ name()'クラスは '__construct()'の2つ以上の引数を必要とするかもしれないので – GusDeCooL

1

func_get_args()は、あなたが探しているものかもしれません。

<?php 
function foo() 
{ 
    $numargs = func_num_args(); 
    echo "Number of arguments: $numargs<br />\n"; 
    if ($numargs >= 2) { 
     echo "Second argument is: " . func_get_arg(1) . "<br />\n"; 
    } 
    $arg_list = func_get_args(); 
    for ($i = 0; $i < $numargs; $i++) { 
     echo "Argument $i is: " . $arg_list[$i] . "<br />\n"; 
    } 
} 

foo(1, 2, 3); 
?> 

上の例の出力は以下となります:PHPドキュメントから

Number of arguments: 3<br /> 
Second argument is: 2<br /> 
Argument 0 is: 1<br /> 
Argument 1 is: 2<br /> 
Argument 2 is: 3<br /> 
1

PHPにおける真の可変サイズの引数を持つ関数を定義する方法があります。あなたはあなたの関数でfunc_get_args機能を使用する必要があります。

function load() { 
    $args = fnc_get_args(); 
    $name = $args[0]; 
    $arg1 = $args[1]; 
    ... 

} 

あなたは、次の呼び出すために何を/方法を決定する必要があります。

関連する問題