如何将函数的结果作为另一个函数的默认值传递?

时间:2016-06-09 10:52:22

标签: php

我有一个在没有用户注意的情况下调用的函数,它只是在我的数据库上创建一行 功能就是这个:

public function createRow($year = 2015) {
    $query = DB::table('myTable')->where('year', '=', $year)->get()->first();
    // The rest of the function doesn't matter
}

这里的问题是我需要此函数的默认值为实际年份之前的年份。为了做到这一点,我试着说:

public function createRow($year = date('Y') - 1) {
    $query = DB::table('myTable')->where('year', '=', $year)->get()->first();
    // whatever
}

很明显它不起作用,所以我做了一个非常小的函数,返回实际年份之前的那一年,我尝试使用小函数的结果作为createRow()函数的默认参数:

public function lastYear() {
   return date('Y') - 1;
}
public function createRow($year = $this->lastYear()) {
    $query = DB::table('myTable')->where('year', '=', $year)->get()->first();
    // Whatever
}

我也尝试过定义一个全局变量:

protected $lastYear = date('Y') - 1;

但我得到了错误:

  

表达式不允许作为字段默认值

我希望你能帮助我。

非常感谢。

2 个答案:

答案 0 :(得分:1)

试试这个:

public function createRow($year = null) {
    if ($year == null)
    {
        $year = date('Y') - 1;
    }
    $query = DB::table('myTable')->where('year', '=', $year)->get()->first();
    // whatever
}

答案 1 :(得分:0)

试试这个

public function createRow($year) {

    if (!$year)
    {
        $year = date('Y') - 1;
    }

    $query = DB::table('myTable')->where('year', '=', $year)->get()->first();
    // whatever
}

您可以更改if条件,因此如果$ year不包含有效值,您可以将其设置为函数开头的默认值。