2009-05-05 20 views
9

Yani temelde bunu anlıyorum ...PHP Üç isteğe bağlı parametre ile sınıf yapısı oluşturulmalı, ancak bir tane gerekli?

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

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

Bir kullanıcının aşağıdaki parametrelerden herhangi biriyle bakmak yapabilmek istiyorum, ama PHP sağlar işleme varsayılan hata tutarken en az bir, gereklidir parametre geçirildi eğer ...

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

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

bunu yapmanın bir yolu var mı?

Belirli bir parametreyi ele almak bir dizi kullanabilirsiniz
+0

Sadece e-posta parametresiyle bir Kullanıcı örneğini nasıl oluşturmak istersiniz? Kimliği null? –

cevap

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

Ve bu nasıl kullanabileceğinizi:

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

Bu dayanan bir hata çalışması durdurulur ve dışarı yazardı senin yapılandırma.

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

İçerisinde if ifadesine ulaşılamazsa, $ u = yeni Kullanıcı() başarısız olur, çünkü varsayılan olmayan parametreleri sağlamadınız. – seanmonstar

+0

@seanmonstar evet gerçekten. OP'nin istediği buydu: $ u = new User(); // PHP buna izin verir –

+0

Bu benim için çalışmadı. Http://php.net/manual/en/functions.arguments.php adresine göre dolaylı olarak aşağıdaki gibi bir varsayılan değer belirlemelisiniz: ´__construct ($ id = null, $ email = null, $ username = null) ´ ve şimdi 'yeni Kullanıcı(); '- PHP Versiyon 5.6.24'ü arayabiliyorum – DerpyNerd

İlgili konular