PHP 函数,用于将默认值设置为对象

2022-08-30 18:25:34

一个函数(实际上是另一个类的构造函数)需要一个对象作为参数。因此,我定义并包含为函数参数。这很好,我必须将对象传递给我的函数。但现在我想将默认值设置为此参数。我该如何做到这一点?class tempinterface itempitemp $objclass tempitemp $obj

还是不可能?

测试代码要澄清:

interface itemp { public function get(); }

class temp implements itemp
{
    private $_var;
    public function __construct($var = NULL) { $this->_var = $var; }
    public function get() { return $this->_var ; }
}
$defaultTempObj = new temp('Default');

function func1(itemp $obj)
{
    print "Got: " . $obj->get() . " as argument.\n";
}

function func2(itemp $obj = $defaultTempObj) //error : unexpected T_VARIABLE
{
    print "Got: " . $obj->get() . " as argument.\n";
}

$tempObj = new temp('foo');

func1($defaultTempObj); // Got: Default as argument.
func1($tempObj); // Got : foo as argument.
func1(); // "error : argument 1 must implement interface itemp (should print Default)"
//func2(); // Could not test as I can't define it

答案 1

你不能。但你可以很容易地做到这一点:

function func2(itemp $obj = null)
    if ($obj === null) {
        $obj = new temp('Default');
    }
    // ....
}

答案 2

Arnaud Le Blanc的答案可能存在的一个问题是,在某些情况下,您可能希望允许作为指定参数,例如,您可能希望以不同的方式处理以下内容:NULL

func2();
func2(NULL);

如果是这样,更好的解决方案是:

function func2(itemp $obj = NULL)
{

  if (0 === func_num_args())
  {
    $obj = new temp('Default');
  }

  // ...

}

推荐