2009-05-05 7 views
9

Więc w zasadzie rozumiem tego ...Konstrukcja klasy PHP z trzema opcjonalnymi parametrami, ale jedna wymagana?

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

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

Chcę móc wykonać użytkownik patrzeć z jednego z następujących parametrów, ale przynajmniej jedna jest wymagane, zachowując błąd domyślnej obsługi PHP zapewnia jeśli nie zostanie przekazany żaden parametr ...

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

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

Czy istnieje sposób na zrobienie tego?

+0

Jak chcesz utworzyć instancję użytkownika za pomocą parametru e-mail? Podaj wartość null dla id? –

Odpowiedz

24

Można używać tablicy do rozwiązania konkretny parametr:

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']; 
     } 
    } 
} 

I jak można to wykorzystać:

// 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

To jej wyświetlać i pisać błędu na podstawie listy 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

To nie dostanie się do instrukcji if wewnątrz, $ u = new User() nie powiedzie się, ponieważ nie podałeś parametrów, które nie mają wartości domyślnych. – seanmonstar

+0

@seanmonstar tak, rzeczywiście. Właśnie tego chciał OP: $ u = new User(); // PHP pozwoliłoby na to –

+0

To nie działało dla mnie. Zgodnie z http://php.net/manual/en/functions.arguments.php musisz domyślnie ustawić domyślną wartość jak poniżej:'__construct ($ id = null, $ email = null, $ username = null) 'i teraz mogę wywołać 'new User();' - PHP w wersji 5.6.24 – DerpyNerd