2009-05-05 9 views
9

그래서 기본적으로 내가 이것을 이해 ...PHP 클래스는 세 개의 선택적 매개 변수로 구성되지만 하나는 필수입니까?

class User 
{ 
    function __construct($id) {} 
} 

$u = new User(); // PHP would NOT allow this 

나는 사용자가 다음 매개 변수로 조회 할 수 있기를 원하지만, PHP가 제공하는 처리 기본 오류를 유지하면서 적어도 하나는, 필요 매개 변수가 전달되지 않으면 ...

class User 
{ 
    function __construct($id=FALSE,$email=FALSE,$username=FALSE) {} 
} 

$u = new User(); // PHP would allow this 

방법이 있습니까?

당신은 특정 매개 변수를 해결하기 위해 배열을 사용할 수
+0

전자 메일 매개 변수로 어떻게 사용자 인스턴스를 구성 하시겠습니까? id에 대해 null을 전달 하시겠습니까? –

답변

24

:

function __construct($param) { 
    $id = null; 
    $email = null; 
    $username = null; 
    if (is_int($param)) { 
     // numerical ID was given 
     $id = $param; 
    } elseif (is_array($param)) { 
     if (isset($param['id'])) { 
      $id = $param['id']; 
     } 
     if (isset($param['email'])) { 
      $email = $param['email']; 
     } 
     if (isset($param['username'])) { 
      $username = $param['username']; 
     } 
    } 
} 

을 그리고 당신이 사용할 수있는 방법 :

// ID 
new User(12345); 
// email 
new User(array('email'=>'[email protected]')); 
// username 
new User(array('username'=>'John Doe')); 
// multiple 
new User(array('username'=>'John Doe', 'email'=>'[email protected]')); 
1

이에 따라 오류가 실행을 중지하고 쓰는 것이 당신의 config.

class User 
{ 
    function __construct($id,$email,$username) 
    { 
     if($id == null && $email == null && $username == null){ 
      error_log("Required parameter on line ".__LINE__." in file ".__FILE__); 
      die(); 
     } 
    } 
} 

$u = new User(); 
+0

그건 if 문 안에 들어 가지 않을 겁니다. 기본값이없는 매개 변수를 제공하지 않았기 때문에 $ u = new User()가 실패합니다. – seanmonstar

+0

@seanmonstar 예. 그것이 OP가 원했던 것입니다 : $ u = new User(); // PHP가 이것을 허용 할 것입니다. –

+0

이것은 저에게 맞지 않습니다. http://php.net/manual/en/functions.arguments.php에 따르면 '__construct ($ id = null, $ email = null, $ username = null)'와 같은 기본값을 암시 적으로 설정해야합니다. 이제'new User();)를 호출 할 수 있습니다. - PHP 버전 5.6.24 – DerpyNerd