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


How to set object's function parameter optional in 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 中使参数可选?

只需将方法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;