2009-05-05 21 views
9

Vì vậy, về cơ bản tôi hiểu điều này ...Xây dựng lớp PHP với ba thông số tùy chọn nhưng một yêu cầu?

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

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

Tôi muốn để có thể làm một người sử dụng nhìn lên với bất kỳ các thông số sau, nhưng ít nhất một là cần thiết, trong khi vẫn giữ lỗi mặc định xử lý PHP cung cấp nếu không có tham số nào được thông qua ...

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

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

Có cách nào để làm điều này không?

+0

Bạn muốn tạo phiên bản Người dùng chỉ với thông số email như thế nào? Vượt qua null cho id? –

Trả lời

24

Bạn có thể sử dụng một mảng để giải quyết một tham số cụ thể:

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

Và làm thế nào bạn có thể sử dụng này:

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

này sẽ ngừng chạy và viết ra một lỗi dựa trên của bạn 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

Điều đó sẽ không nhận được câu lệnh if bên trong, $ u = new User() sẽ thất bại vì bạn không cung cấp các tham số không có mặc định. – seanmonstar

+0

@seanmonstar đúng vậy. Đó là những gì OP muốn: $ u = new User(); // PHP sẽ cho phép điều này –

+0

Điều này không hiệu quả đối với tôi. Theo http://php.net/manual/en/functions.arguments.php bạn phải ngầm đặt một giá trị mặc định như sau: ´__construct ($ id = null, $ email = null, $ username = null) ´ và bây giờ tôi có thể gọi 'Người dùng mới();' - Phiên bản PHP 5.6.24 – DerpyNerd

Các vấn đề liên quan