是否可以将 class 成员值传递给 class 方法?

Is it possible to pass class member value to class method?

在PHPclass中,我有一个会员专柜:

private $counter = [];

我想获取此数组的长度并将其作为方法参数的默认值传递:

public function myMethod($n = $counter)){

}

我试过:

public function myMethod($n = count($this->$counter))){
    // not working
}

public function myMethod($n = count($this->counter))){
    // not working
}

public function myMethod($n = array('MyClass', count($counter)))){
    // still not working
}

public function myMethod($n = $this->methodReturningCounterLength()){
    // not working
}

我想做的事情有可能吗?

根据我的想法,最好的实现方式如下

class A{
  private $counter = [];
  public function foo($length=null){
    $length = empty($length) ? count($this->counter) : $length;
    echo $length;
  }
}
$ob = new A();
$ob->foo();

这是不可能的,但您可以这样做:

public function myMethod($n = null){

       if(is_null($n)) 
           $n = count($this->counter);

}

您不能使用变量、属性 或函数调用作为默认参数值。它必须是一个常数值。

所以你需要做的是这样的:

 public function myMethod($n = null){
        if (is_null($n)) {
            $n = count($this->counter);
        }
        // echo($n);
    }

我认为您尝试做的事情是不可能的,PHP 文档针对 default argument values 指出:

The default value must be a constant expression, not (for example) a variable, a class member or a function call.

所以我认为最好的方法是:

public function myMethod($n = null){
    if ($n === null) {
        $n = count($this->counter);
    }
}