2013-06-02 3 views
1

함수를 호출 할 때 너무 많은 인수를 피할 수있는 방법이 있습니까? 내가 이렇게PHP에서 함수를 호출 할 때 너무 많은 인수를 피하는 방법

Eg: 
function myFunction($usrName,$usrCountry,$usrDOB//and many more){ 
    // Do something with all those arguments here 
} 

한 가지 방법은 상수

//After thorough checking 

$sesUserName = $_SESSION['sesUserName']; 

define('USERNAME', $sesUserName); 

myFunction(){ 
    // Do something with USERNAME here 
    // No need to use USERNAME when calling the function 
} 

를 정의하지만,이 작업을 수행하는 다른 방법이 있나요? 그 필요한 모든 PARAMS

function myFunction($arrayArgs){ 
    if(is_array(arrayArgs){ 
     if(!array_key_exists('usrName', $arrayArgs)){ 
      return null; 
     } 

     if(array_key_exists('usrCountry', $arrayArgs)){ 
      return null; 
     } 

     //and many other ifs 
    } 
} 
+0

나는 거기서 상수로하고있는 일을하지 않을 것이다. 'myFunction()'에서'$ sesUserName'에 정말로 접근하고 싶다면,'myFunction()'의 첫번째 줄로'global $ sesUserName; '을 호출 할 수 있습니다. 이것은 끊임없는 일에서 한발 더 나아졌지만 여전히 일반적으로 낙담합니다. 'global '을하지 않고도 슈퍼 전역 ('$ _SESSION'과 같은'$ _' 배열)에 접근 할 수 있으므로 함수 내에서'$ _SESSION ['sesUserName ']'에 직접 액세스 할 수 있습니다. 그래도이 방법이 최선의 방법은 아닙니다. 다른 사람들이 지적한 것처럼 연관 배열을 사용하는 것이 좋습니다. –

+0

그들은 필수 항목입니다. 하지만 내가 말했듯이, 나는 이것을하는 다른 방법을 모른다. – Norman

+0

배열을 구문 분석 할 수 있습니다. –

답변

4

한 가지 방법은 OOP 프로그램을 사용하기 시작하고 사용자 개체를 생성하는 것입니다. 이렇게하면 임의의 속성 또는 상수 그룹과 대조적으로 사용자를 단일 엔터티로 사용할 수 있습니다.

<?php 

    class User { 
     public $name; 
     public $country; 
     public $dateOfBirth; 
     // for stuff that a user does or is define as instance methods 
     public function isUserOver18(){ 
      return time() < strtotime("+18 years", strtotime($dateOfBirth)); 
     } 
    } 

    $user = new User(); 
    $user->name = $data["name"]; 
    $user->country = $data["country"]; 
    $user->dateOfBirth = $data["dob"]; 

    if ($user->isUserOver18()){ 
     // show page 
    } else { 
     echo "You must be 18 years or older to view this video"; 
    } 

    // for stuff that is done to a user pass it in as an argument. 

    notifyUser($user, "You've got mail"); 
1

당신은 인수의 배열을 전달할 수 있습니다? 모든 필수 키가있는 매개 변수로 배열을 1 개 가질 수 있습니다.

예컨대 : function myFunc($arr) 및 배열 대신 PARAMS의 톤을 전달해야하는 엄청난 기능을 만드는 array('user_name' => '', 'user_country' => '',...)

2

될 것이다. 객체 지향 프로그래밍에 대해 배우고 PHP 클래스를 작성하십시오.

나는이 기술을 배우면 프로그래밍이 완전히 다른 것을 볼 것이라고 약속합니다. 데이터베이스 작업, 사용자 관리 시스템 등과 같이 자주 수행하는 작업에 대해 재사용 가능한 클래스를 만들 수 있습니다.

개체와 클래스를 사용하여 마스터하는 것은 평범한 프로그래머와 훌륭한 프로그래머를 구분하는 것입니다.

Here is a good beginner tutorial on object oriented programming in PHP

0

젠드 프레임 워크 1.x에는 실제로 매개 변수 처리를위한 훌륭한 구현이있었습니다. 규칙은 아주 간단합니다. 매개 변수가 3 개 이하인 경우 직접 지정하십시오. 그러나 이미 3 이상을 필요로하는 경우에는 호출 할 때 키 값 쌍 값의 배열을 지정하는 배열로 3 번째 매개 변수가 필요합니다. 실제로 경험에 기초한 꽤 멋진.

관련 문제