PHP Sınıf üç isteğe bağlı parametreler ile inşa ama bir ihtiyaç?

2 Cevap php

Yani temelde ben bu anlıyorum ...

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

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

Ben bir kullanıcı aşağıdaki parametrelerden herhangi bakmak yapmak mümkün olmak istiyorum, ama hiçbir parametre geçirilir sağlayan varsayılan hata işleme PHP tutarken en az biri gereklidir ...

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

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

Bunu yapmak için bir yolu var mı?

2 Cevap

Belirli bir parametreyi gidermek için bir dizi kullanabilirsiniz:

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 nasıl bu kullanabilirsiniz:

// ID
new User(12345);
// email
new User(array('email'=>'user@example.com'));
// username
new User(array('username'=>'John Doe'));
// multiple
new User(array('username'=>'John Doe', 'email'=>'user@example.com'));

Bu çalışmasını durdurmak ve yapılandırma dayalı bir hata yazmak istiyorum.

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();