PHP意外的其他

时间:2010-06-26 16:19:29

标签: php if-statement

我正在通过特定国家/地区的代码在我的网站上过滤一些内容,我正在尝试添加其他语句,因此除了我尝试的任何错误之外,它不必将每个部分作为单独的代码运行:

<?php if (function_exists('isCountryInFilter')) { ?>
<?php if(isCountryInFilter(array("us", "ca"))) { ?>
<a rel="nofollow" class='preloading gallery_image' href="#" target="_blank">
<?php } ?>

<?php elseif(isCountryInFilter(array("au"))) { ?>
<a rel="nofollow" class='preloading gallery_image' href="#" target="_blank">
<?php }  ?>

<?php else(isCountryInFilter(array("nz"))) { ?>
<a rel="nofollow" class='preloading gallery_image' href="#" target="_blank">
<?php }}  ?>

上面给出了以下错误:Parse error: syntax error, unexpected T_ELSEIF in并引用了第一个elseif

5 个答案:

答案 0 :(得分:4)

当您将PHP与直接HTML / OUTPUT结合使用时。在代码中,您在结束括号和elseif关键字之间打印空格。

PHP的Interpreter直接在}后面查找elseif关键字,但它找到的是输出数据块,因此会引发错误。

<?php if (function_exists('isCountryInFilter')) { ?>
<?php if(isCountryInFilter(array("us", "ca"))) { ?>
<a rel="nofollow" class='preloading gallery_image' href="#" target="_blank">
<?php } ?>
<!--PHP Finds space here which it does not expect.-->
<?php elseif(isCountryInFilter(array("au"))) { ?>
<a rel="nofollow" class='preloading gallery_image' href="#" target="_blank">
<?php }  ?>
<!--PHP Finds space here which it does not expect.-->
<?php elseif(isCountryInFilter(array("nz"))) { ?>
<a rel="nofollow" class='preloading gallery_image' href="#" target="_blank">
<?php }}  ?>

您需要做的是删除这样的空格。

<?php if (function_exists('isCountryInFilter')) { ?>
  <?php if(isCountryInFilter(array("us", "ca"))) { ?>
    <a rel="nofollow" class='preloading gallery_image' href="#" target="_blank">
  <?php }elseif(isCountryInFilter(array("au"))) { ?>
    <a rel="nofollow" class='preloading gallery_image' href="#" target="_blank">
  <?php }else(isCountryInFilter(array("nz"))) { ?>
    <a rel="nofollow" class='preloading gallery_image' href="#" target="_blank">
<?php}}?>

您会注意到PHP块外的空间不足。

这可以解决您的问题。

答案 1 :(得分:3)

否则无法评估条件,如果所有其他条件都为假,则会执行该条件,请根据开关的默认状态来考虑。

此:

<?php else(isCountryInFilter(array("nz"))) { ?>
    <a rel="nofollow" class='preloading gallery_image' href="#" target="_blank">
    <?php }}  ?>

需要这样:

<?php else if(isCountryInFilter(array("nz"))) { ?>
<a rel="nofollow" class='preloading gallery_image' href="#" target="_blank">
<?php }}  ?>

答案 2 :(得分:2)

而不是那种格式使用

<?php if($foo == 1): ?>
   html code
<?php else if($foo == 2): ?>
   other html
<?php else: ?>
   more html code
<?php end; ?>

答案 3 :(得分:2)

甚至更好地在许多情况下使用开关盒。 例如:

switch($x) {
  case 1:
  ?> some html <?php
  break;
  case 2: 
  ?> more html <?php
  break;
}

不是关闭标签,而是可以回显/打印html。

这将有效:

<?php if (function_exists('isCountryInFilter')) {
if(isCountryInFilter(array("us", "ca"))) {
?>
<a rel="nofollow" class='preloading gallery_image' href="#" target="_blank">
<?php } elseif(isCountryInFilter(array("au"))) { ?>
<a rel="nofollow" class='preloading gallery_image' href="#" target="_blank">
<?php } elseif(isCountryInFilter(array("nz"))) { ?>
<a rel="nofollow" class='preloading gallery_image' href="#" target="_blank">
<?php }
}
?>

答案 4 :(得分:1)

FrEaKmAn的答案可能会奏效,但我更喜欢花括号。尝试更改

<?php } ?>
<?php elseif(isCountryInFilter(array("au"))) { ?>

<?php } elseif(isCountryInFilter(array("au"))) { ?>

另外,一般情况下,最好尽量减少进入和退出php块的次数...

(一旦修好了这个部分,你就需要处理DamienL指出的问题。)