方法定义:如何使用类属性作为默认函数参数


Method definition: how can I use class property as a default function parameter?

首先,我尝试声明以下类:

class MyClass{
  public $min;
  public $max;
  function my_func($min=$this->min,$max=$this->max){
  }
}
PHP抛出syntax error, unexpected T_VARIABLE错误。所以我需要这样做:
class MyClass{
  public $min;
  public $max;
  function my_func($min=NULL,$max=NULL){
    if(!isset($min)) $min = $this->min;
    if(!isset($max)) $max = $this->max;
  }
}

没有错误(我没有测试这段代码,但我认为它应该工作)。

但是这种方法有几个缺点:

  1. 我不能将NULL作为值传递给函数,因为将使用默认值。

有更好的解决方案吗?

编辑1

根据@nickb的建议,我可以使用常量:

class MyClass{
    const MIN = 0;
    const MAX = 10;
    function my_func($min = MyClass::MIN, $max = MyClass::MAX) {
    }
}

这是一个很好的解决方案,除了$min和$max会不时改变的情况:

$a = new MyClass();
$min = 0;
$max = 10;
$b = new MyClass();
$a->MyFunc(1,2);
$b->MyFunc();

不幸的是,这就是我的情况:(

这可能是一个强制的场景,我不应该为类建立这样的"灵活性",但这正是我计划要做的。我应该补充一点:我在OOP方面确实是个新手。

可以使用常量:

class MyClass{
    const MIN = 0;
    const MAX = 10;
    function my_func($min = MyClass::MIN, $max = MyClass::MAX) {
    }
}

你只需要记住默认值必须是常量表达式。从手册:

默认值必须是常量表达式,而不是(例如)变量、类成员或函数调用。