2012-02-14 7 views
4

나는 이와 같은 기능을 가지고있다.함수에서 인수를 전달하는 방법은 무엇입니까?

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

몇 가지 클래스를로드 한 클래스 property과 무한한 인수로 설정합니다 load() 방법은 그들이 할당 된 클래스에 따라 달라집니다.

난 단지, 3 인수 방법 $this->load를 설정하면 다른 예제 과정

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

가 그런 일을 할 수 있습니다에 무슨 일이 일어날 지이? 당신이 인수에 기본값을 설정하지 않는 함수가 호출 될 때 값을

답변

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()' – GusDeCooL

1

func_get_args() 당신을 위해 무엇을 찾고있는 사람이 될 수 있습니다. PHP는 문서에서 :

<?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); 
?> 

위 예제의 출력 :

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]; 
    ... 

} 

당신은 그럼 어떻게 다음 전화를 무엇을 /를 결정해야합니다.

관련 문제