CI 묻고 답하기

제목 func_get_args()
글쓴이 변종원(웅파) 작성시각 2009/04/07 13:51:20
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 34293   RSS
func_get_args() <- 이 함수 오늘 처음으로 뭔 일을 하는지 찾아봤네요.

날코딩이나 class를 쓸때도 필요하지 않았었는데 CI로 플러그인 구조를 만들다보니 필요해진 함수네요.
그런데 평상시에도 사용하면 유연성을 발휘할 수 있습니다.
다음 예문을 보세요.

a.php
theme('page', 'aa');

function theme() {
$args = func_get_args();
print_r($args);
}
?>
아래 예문과 비교해보세요.

b.php
theme('page', 'aa');

function theme($a, $b) {
$args = func_get_args();
echo "$a, $b";
}
?>

밑의 b.php는 argument 없이 thme(); 로 호출하면 Warning: Missing argument 1, 2 for theme() 를 뱉어냅니다.
위의 a.php는 argument를 주지 않더라도 에러가 나지 않습니다. argument를 몇개를 주던지 배열로 받아서 처리하니까 유연해지죠.

함수의 무결성(용어가 적절하진 않지만, 꼭 필요한 변수만을 받아서 처리해야하는 경우)을 보장해야 한다면 기존 방식대로 argument를 선언해주는 것이
맞고, 플러그인 같이 여러 개발자 개발하여 적용하는 경우에는 유용할 것 같습니다.

CMS 개발하다보니 평상시 개발과는 다른 구조때문에 재미있는 것을 발견하게 되네요. ^^
 다음글 mod_rewrite 사용시 경로설정은 어떻게들 하시나... (6)
 이전글 (가칭) Codeigniter 한국 사용자 포럼 도메인... (6)

댓글

kirrie / 2009/04/07 15:23:26 / 추천 0
php5에서는 __call이라는 매직 메소드가 클래스에서 비슷한 기능을 합니다. 이거 쓰면 참 편해지는데, 아무래도 호환성때문에 개인적으로 쓰는 것이 아니면 꺼려지죠. ^^

class MagicMethods {

function __call($name, $args)
{
echo 'Method : '.$name.'
';
echo 'Params : ';
print_r($args);
}

}

$MM = new MagicMethods;
$MM->hello('world!');

//결과
/*
method : hello
params : array([0] -> 'world!')
*/
?>
변종원(웅파) / 2009/04/07 17:39:50 / 추천 0
php4는 func_get_args() 를 이용하고 php5는 kirrie님이 올리신 소스로 버전에 따라 작동하게 해서 쓰시면 되겠네요. ^^
하나 만들어서 올려주삼! ^_________^
양승현 / 2009/04/08 09:22:22 / 추천 0
신기한게 많네요.. ㅎㅎ