首先,我尝试声明以下类:
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;
}
}
没有错误(我没有测试这段代码,但我认为它应该工作)。
但是这种方法有几个缺点:
我不能将
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) {
}
}
你只需要记住默认值必须是常量表达式。从手册:
默认值必须是常量表达式,而不是(例如)变量、类成员或函数调用。