2009-05-05 12 views
9

Also im Grunde verstehe ich das ...PHP Klassenkonstrukt mit drei optionalen Parametern, aber einer benötigt?

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

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

Ich möchte ein Benutzer nachschlagen mit einem der folgenden Parameter tun zu können, aber mindestens eine erforderlich ist, während die Standard-Fehler halten Umgang mit PHP bietet Wenn kein Parameter übergeben wird ...

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

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

Gibt es eine Möglichkeit, dies zu tun?

+0

Wie möchten Sie eine Benutzerinstanz nur mit dem E-Mail-Parameter erstellen? NULL für ID übergeben? –

Antwort

24

Sie ein Array verwenden könnte einen bestimmten Parameter zu adressieren:

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

Und wie können Sie verwenden, um dies:

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

Dieses es vom Laufen stoppen würde und einen Fehler schreiben, basierend auf Konfig.

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

Das würde nicht an die if-Anweisung im Inneren gelangen, $ u = new User() wird fehlschlagen, weil Sie keine Parameter ohne Standardwerte angegeben haben. – seanmonstar

+0

@seanmonstar ja in der Tat. Das wollte der OP: $ u = new User(); // PHP würde dies erlauben –

+0

Das hat nicht für mich funktioniert. Laut http://php.net/manual/en/functions.arguments.php müssen Sie implizit einen Standardwert wie folgt setzen:'__construct ($ id = null, $ email = null, $ username = null) 'und Jetzt kann ich 'new User();' - PHP Version 5.6.24 aufrufen – DerpyNerd