我是PHP的新手,有人要求我编写一个基于时间显示图像的脚本。我已经扣除了我需要使用PHP的原生"日期"函数,直到我被要求在其中实现银行假日和圣诞节,一切都很顺利。
我试图将圣诞节和银行假日作为一个单独的if语句添加进来,但那是灾难发生的时候,我一直不明白为什么它会停止。我尝试过使用在线PHP验证器,但没有成功。
请不要害怕向我抛出细节和行话,因为我真的希望在未来扩大我的PHP知识,减少对网络论坛支持的依赖!
这是代码:
<?php
// Date-time (day of month, month)
$d = date('j'); // Day of month: Numeric without leading zeroes
$m = date('n'); // Month: As above
$D = date('w'); // Day of week
$H = date('G'); // Hour of day
// REGULAR OPENING TIMES
// Closed before 9am on weekdays
if ($H < 9 && $D <= 5) :
$showroom_img = '/media/gbu0/pagehead/showroom_closed.jpg';
// Open before 5pm (but after 9, as first if statement overrides this) on weekdays
elseif ($H < 17 && $D <= 5) :
$showroom_img = = '/media/gbu0/pagehead/showroom_open.jpg';
// Closed before 10am on Saturdays
elseif ($H < 10 && $D == 6) :
$showroom_img = = '/media/gbu0/pagehead/showroom_closed.jpg';
// Open between 10am and 2pm on Saturdays
elseif ($H < 14 && $H > 10 && $D == 6) :
$showroom_img = = '/media/gbu0/pagehead/showroom_open.jpg';
// Any other time, display closed image :)
else :
$showroom_img = = '/media/gbu0/pagehead/showroom_closed.jpg';
endif;
// Holidays 2014
$xmas_starts = ($d == 23 && $m == 12 && $d > 17);
$xmas_ends = ($d == 26 && $m == 12);
$nyd = ($d == 1 && $m = 1);
// Easter Friday: April 18
// Easter Monday: April 21
// Early Spring B/H: May 5
// Late Spring B/H: May 26
// Summer B/H: August 25
// All bank holidays: 10am - 2pm
if( date >= $xmas_starts && $day <= $xmas_ends ) :
$xmas = true;
elseif( date = $nyd ) :
$nyd = true;
else :
$bankhol = false;
endif;
if( $xmas = true ) :
$showroom_img = "/media/gbu0/pagehead/showroom_xmas.jpg";
elseif( $bankhol = true && date('F', 'j') = strpos('April 18' || 'April 21' || 'May 5' || 'May 26' || 'August 25') || date('w') = 6 ) :
$showroom_img = "/media/gbu0/pagehead/showroom_bhol.jpg";
elseif( date('w') = 7 ) :
$showroom_img = "/media/gbu0/pagehead/showroom_closed.jpg";
else :
$showroom_img = "/media/gbu0/pagehead/showroom_open.jpg";
endif;
?>
首先。我注意到几个错误:
elseif( date = $nyd ) :
$nyd = true;
和
if( $xmas = true ) :
$showroom_img = "/media/gbu0/pagehead/showroom_xmas.jpg";
在PHP中,'='是赋值运算符,用于为变量赋值。这里需要的是比较运算符'=='。例如:
if( $xmas == true ) :
或者你也可以这样做(已经在评论中指出了):
if( $xmas ) :
根据优先级,if语句将按照您在代码中写入它们的顺序进行检查。为了确保某个条件获得最高优先级,必须首先对其进行检查。
您是否考虑过使用switch case函数而不是elseif?
切换案例方法:
switch ($i) {
case 0:
echo "i equals 0";
break;
case 1:
echo "i equals 1";
break;
case 2:
echo "i equals 2";
break;
}
点击此处阅读更多信息:http://www.php.net/manual/en/control-structures.switch.php
if
语句不能冲突,也没有优先级的概念。每一个都按照它出现的顺序进行评估和执行,除非它被代码分支跳过(例如,如果同一链中的前一个if
或elseif
被评估为true,则elseif
将被跳过)。
问题的原因很可能是您混淆了赋值运算符和相等运算符(=
和==
)。
在所有情况下,x = y
都是一个赋值;即它将CCD_ 8的值分配给变量CCD_。即使你把它放在if
语句中,情况也是如此,所以它通常是你想要避免的(尽管在某些情况下它很有用)。
在所有情况下,x == y
都是相等的比较;即它检查CCD_ 12的值是否与CCD_。这是在if
条件下通常需要的。
换句话说,你想改变这个:
if( $xmas = true )
对此:
if( $xmas == true )
你也需要在其他几个地方做同样的事情。