2009-05-05 9 views
9

だから、基本的に私はこのことを理解して...3つのオプションのパラメータを必要とする3つのパラメータを持つ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

どのように電子メールパラメータだけでUserインスタンスを構築したいですか? 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

デフォルトの値を持たないパラメータを指定していないため、$ u = new User()のif文の内部には入りません。 – 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 Version 5.6.24 – DerpyNerd

関連する問題