PHP类中的If-else语句语法问题

PHP类中的If-else语句语法问题,php,class,if-statement,Php,Class,If Statement,我正在上课检查假期。我为特定的假日创建了函数,并创建了一个总体函数来查看日期是否是假日,而不是特定的假日 我得到以下错误: Parse error: syntax error, unexpected 'else' (T_ELSE) in C:\xampp\htdocs\mgmt\classes\Holidays.php on line 52 这是我的密码: <?php class Holidays { //private member variables private

我正在上课检查假期。我为特定的假日创建了函数,并创建了一个总体函数来查看日期是否是假日,而不是特定的假日

我得到以下错误:

Parse error: syntax error, unexpected 'else' (T_ELSE) in C:\xampp\htdocs\mgmt\classes\Holidays.php on line 52
这是我的密码:

<?php
class Holidays {

    //private member variables
    private $date;

    //constructors
    public function Holidays() {
        $this->$date = date("Y-m-d");
    }

    //setters
    public function setDate($date) {
        $this->$date = $date;
    }

    //getters
    public function getDate() {
        return $this->$date;
    }

    //member public functions
    public function isNewYears($date) {
        return ($date == date('Y', $date)."-01-01" ? true : false);
    }
    public function isMLKDay($date) {
        return ($date == date("Y-m-d", strtotime("third Monday of January ".date('Y', $date)) ? true : false));
    }
    public function isValentinesDay($date) {
        return ($date == date('Y', $date)."-02-14" ? true : false);
    }
    public function isPresidentsDay($date) {
        return ($date == date("Y-m-d", strtotime("third Monday of February ".date('Y', $date)) ? true : false));
    }
    public function isEaster($date) {
        return ($date == date("Y-m-d", easter_date($date)) ? true : false);
    }
    public function isMemorialDay($date) {
        return ($date == date("Y-m-d", strtotime("last Monday of May ".date('Y', $date)) ? true : false));
    }
    public function isLaborDay($date) {
        return ($date == date("Y-m-d", strtotime("first Monday of September ".date('Y', $date)) ? true : false));
    }
    public function isThanksgiving($date) {
        return ($date == date("Y-m-d", strtotime("fourth Thursday in November".date('Y', $date)) ? true : false));
    }
    public function isChristmas($date) {
        return ($date == date('Y', $date)."-12-25" ? true : false);
    }   
    public function isHoliday($date) {
        if (isNewYears($date))
        else if (isMLKDay($date))
        else if (isValentinesDay($date))
        else if (isPresidentsDay($date))
        else if (isEaster($date))
        else if (isMemorialDay($date))
        else if (isLaborDay($date))
        else if (isThanksgiving($date))
        else if (isChristmas($date))
        else return false;
    }
}
?>


它在
isHoliday()
中的第一个else语句上抛出错误。如果这不是正确的结构,那么我应该怎么做呢?

If
通过时,您需要执行一条语句

if( isNewYears($date)) do_something_here();
else...

if
通过时,您需要执行一条语句

if( isNewYears($date)) do_something_here();
else...

您正在尝试执行逻辑or,可以使用
| |

public function isHoliday($date) {
    return $this->isNewYears($date)
        || $this->isMLKDay($date)
        || $this->isValentinesDay($date)
        || $this->isPresidentsDay($date)
        || $this->isEaster($date)
        || $this->isMemorialDay($date)
        || $this->isLaborDay($date)
        || $this->isThanksgiving($date)
        || $this->isChristmas($date);
}
您还可以删除if/else,只需返回布尔表达式本身的结果

编辑- 您发布的代码中还有其他错误-

构造函数应该使用$this->date,而不是$this->$date

public function Holidays() {
    $this->date = date("Y-m-d");
}
除此之外,如果需要当前实例化的$date值,那么应该使用符号

 $this->date
该函数不存在

public function isEaster($date) {
    return ($date == date("Y-m-d", easter_date($date)) ? true : false);
}
解决此问题后,您应该能够将其用作-

$holidays = new Holidays();
$isHoliday = $holidays->isHoliday(date("Y-m-d"));
if($isHoliday) {
  echo "Today is a holiday!";
} else {
  echo "Today is not a holiday! :(";
}

由于您的函数似乎都是辅助函数,因此建议您改为查看php中的静态函数:)

您正在尝试执行逻辑or,可以使用
|

public function isHoliday($date) {
    return $this->isNewYears($date)
        || $this->isMLKDay($date)
        || $this->isValentinesDay($date)
        || $this->isPresidentsDay($date)
        || $this->isEaster($date)
        || $this->isMemorialDay($date)
        || $this->isLaborDay($date)
        || $this->isThanksgiving($date)
        || $this->isChristmas($date);
}
您还可以删除if/else,只需返回布尔表达式本身的结果

编辑- 您发布的代码中还有其他错误-

构造函数应该使用$this->date,而不是$this->$date

public function Holidays() {
    $this->date = date("Y-m-d");
}
除此之外,如果需要当前实例化的$date值,那么应该使用符号

 $this->date
该函数不存在

public function isEaster($date) {
    return ($date == date("Y-m-d", easter_date($date)) ? true : false);
}
解决此问题后,您应该能够将其用作-

$holidays = new Holidays();
$isHoliday = $holidays->isHoliday(date("Y-m-d"));
if($isHoliday) {
  echo "Today is a holiday!";
} else {
  echo "Today is not a holiday! :(";
}

由于您的函数似乎都是助手,因此建议您改为查看php中的静态函数:)

编辑:忽略我的答案。艾伦·福斯特(Alan Foster)的答案更好,应该是国际海事组织认可的答案。 尝试:


编辑:忽略我的答案。艾伦·福斯特(Alan Foster)的答案更好,应该是国际海事组织认可的答案。 尝试:


这修复了错误。如果您不需要任何代码,请保持这样,否则您可以在特定部分编写代码:

public function isHoliday($date) {
    if (isNewYears($date)) {}
    else if (isMLKDay($date)) {}
    else if (isValentinesDay($date)) {}
    else if (isPresidentsDay($date)) {}
    else if (isEaster($date)) {}
    else if (isMemorialDay($date)) {}
    else if (isLaborDay($date)) {}
    else if (isThanksgiving($date)) {}
    else if (isChristmas($date)) {}
    else return false;
}

这修复了错误。如果您不需要任何代码,请保持这样,否则您可以在特定部分编写代码:

public function isHoliday($date) {
    if (isNewYears($date)) {}
    else if (isMLKDay($date)) {}
    else if (isValentinesDay($date)) {}
    else if (isPresidentsDay($date)) {}
    else if (isEaster($date)) {}
    else if (isMemorialDay($date)) {}
    else if (isLaborDay($date)) {}
    else if (isThanksgiving($date)) {}
    else if (isChristmas($date)) {}
    else return false;
}


如果语句没有主体,PHP会认为您的
语句没有主体,而它们没有主体。为了澄清(并避免语法陷阱),您应该始终在
if
语句中使用大括号。PHP认为如果
语句没有主体,您的
else语句就没有主体,而它们没有主体。为了澄清(并避免语法陷阱),您应该始终在
if
语句中使用大括号。我认为这不是一个合适的答案,因为在表达式块中除了“return true”之外,没有其他有用的方法,您的答案是正确的,@AlanFoster。当StackOverflow允许时,我会这样标记。答案是“半正确”--解决方案是不添加要在那里执行的内容。。。但是在if后面加一个分号,这意味着不需要执行任何操作。我认为这不是一个合适的答案,因为在表达式块中除了“return true”之外,没有其他有用的方法,你的答案是正确的,@AlanFoster。当StackOverflow允许时,我会这样标记。答案是“半正确”--解决方案是不添加要在那里执行的内容。。。但是在if后面加一个分号,这意味着不需要执行任何操作。这可能是一个很好的提示,但应该是一个注释,而不是答案。出现了以下错误:
altar error:C:\xampp\htdocs\mgmt\classes\Holidays.php第51行的未定义函数isNewYears()调用,忘记了函数调用的前缀
$this->
。我已经添加了一些关于我注意到的其他问题的附加注释,希望能有所帮助:)谢谢。你能详细说明为什么它们应该是静态的吗?我对他们真的不熟悉。我读了几篇文章,但仍然没有真正理解。这可能是一个很好的提示,但应该是一个注释而不是答案。得到了以下错误:
致命错误:调用C:\xampp\htdocs\mgmt\classes\Holidays.php中未定义的函数isNewYears(),第51行
抱歉,忘记了函数调用的前缀
$this->
。我已经添加了一些关于我注意到的其他问题的附加注释,希望能有所帮助:)谢谢。你能详细说明为什么它们应该是静态的吗?我对他们真的不熟悉。我读了几篇文章,但仍然没有真正理解。你能为我详细说明一下
$this->$date
吗?我的印象是,
这个
意味着传入的变量。似乎在PHP中它引用了类成员变量?我将删除我的答案,因为AlanFoster的答案实际上是正确的,因为函数已经返回布尔值了$此->日期是$date的别名,但仅在函数中可用,除非在类的顶部调用它,如
public$date=NULL
可以让您将相同的日期传递给任何函数(如$this->date),您能为我详细介绍一下
$this->$date
吗?我的印象是,
这个
意味着传入的变量。似乎在PHP中它引用了类成员变量?我将删除我的答案,因为AlanFoster的答案实际上是正确的,因为函数已经返回布尔值了$此->日期是$date的别名,但仅在函数中可用,除非在类的顶部调用它,如
public$date=NULL允许您将相同的日期传递给任何函数(如$this->date)