首先我尝试声明以下类:
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的新手。
答案 0 :(得分:1)
您可以使用常量:
class MyClass{
const MIN = 0;
const MAX = 10;
function my_func($min = MyClass::MIN, $max = MyClass::MAX) {
}
}
您必须记住,默认值必须是常量表达式。来自the manual:
默认值必须是常量表达式,而不是(例如)变量,类成员或函数调用。