2009-05-05 17 views
9

Quindi, in pratica ho capito questo ...Costruisci PHP Class con tre parametri facoltativi ma uno richiesto?

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

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

Voglio essere in grado di fare un utente osserva in su con uno qualsiasi dei seguenti parametri, ma almeno una è necessaria, pur mantenendo l'errore di default la gestione PHP fornisce se nessun parametro è passato ...

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

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

C'è un modo per fare questo?

+0

Come si desidera costruire un'istanza utente con solo il parametro email? Passa null per id? –

risposta

24

Si potrebbe utilizzare una matrice per affrontare uno specifico parametro:

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

E come è possibile utilizzare questo:

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

Ciò impedirgli di correre e scrivere un errore, sulla base di 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

Impossibile ottenere l'istruzione if all'interno, $ u = new User() avrà esito negativo perché non hai fornito parametri privi di valori predefiniti. – seanmonstar

+0

@seanmonstar sì, davvero. Questo è ciò che l'OP voleva: $ u = new User(); // PHP consentirebbe questo –

+0

Questo non ha funzionato per me. Secondo http://php.net/manual/en/functions.arguments.php devi impostare implicitamente un valore predefinito come questo:'__construct ($ id = null, $ email = null, $ username = null) 'e ora sono in grado di chiamare 'new User();' - Versione PHP 5.6.24 – DerpyNerd

Problemi correlati