如何在php oop中设置对象的函数参数可选

时间:2014-12-17 16:50:05

标签: php oop

我想在类结构中使用这样的东西:

$public $choice;

function __construct(){
    $this->set_login($this->choice);
}

private function set_login($this->choice){
    if($this->choice=='2'){
       // don't set login credentials
    }else{
       // set login credentials
    }
}

上面的代码要求在每次初始化类之前设置$ choice。 但我想将$ choice设置为可选参数。 我想如果在任何页面中,我这样称呼:

 $login = new login();

该类将正常设置登录凭据,但如果这样调用:

  $login = new login();
  $login->choice = 2;

然后将不会设置登录凭据。

我不确定这个类是否会以这种方式执行,因为只要我初始化类,就会调用__construct方法并在那时设置$ choice。但是如果我在初始化后设置$ choice,那么代码是否可以工作?

如何在oop中使参数可选?

1 个答案:

答案 0 :(得分:0)

只需将方法set_login定义为:

public function set_login($choice = 1) {
    if ($choice == 2) {
       // don't set login credentials
    } else {
       // set login credentials
    }
}

并使用它:

$login = new login();

// Login.
$login->set_login();
// Doesn't login.
$login->set_login(2);

修改

另一种解决方案:

private $choice;

function __construct($choice = false) {
    $this->set_login($choice);

    // If you want to remember the choice, you can save it in a property:
    $this->choice = $choice; 
}

private function set_login($choice) {
    if ($choice == 2) {
       // don't set login credentials
    } else {
       // set login credentials
    }
}

请注意,以下代码永远不会按预期工作,因为您在构造函数中执行方法set_login后更改了选择的值:

$login = new login();
$login->choice = 2;