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

时间:2015-07-20 16:56:48

标签: php oop

首先我尝试声明以下类:

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作为值传输给函数,因为将使用默认值。

  2. 这是冗长的

  3. 有没有更好的解决方案?

    编辑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的新手。

1 个答案:

答案 0 :(得分:1)

您可以使用常量:

class MyClass{
    const MIN = 0;
    const MAX = 10;

    function my_func($min = MyClass::MIN, $max = MyClass::MAX) {
    }
}

您必须记住,默认值必须是常量表达式。来自the manual

  

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