2011-03-08 53 views
0

我使这个PHP脚本,但Dreamweaver指出(作为解析的代码写),这个字符串是不正确的。PHP - 这个PHP语法有什么问题?

在它完美的任何情况下,但也许我错了出头:

for($i=1; $i<=$npagine; $i++) { 
?> <a <? if($i==$index) { ?> class="paginas" <? } else { ?> class="pagine" <? } ?> href="index.php?<?=$splitter_zone?>&index=<?=$i?>"><?=$i?></a> <? 
} 

任何想法?

+1

问题出在Dreamweaver上,而不是你的代码。我建议使用除Dreamweaver之外的其他代码编写PHP代码 - 这非常糟糕。 – 2011-03-08 17:48:09

+0

它看起来好像dreamweaver对php和html模板的混合有一些问题。 – 2011-03-08 17:49:46

+0

我很惊讶Dreamweaver仍然生成这样的代码,还是旧版本? – Adam 2011-03-08 17:56:42

回答

3

该代码看起来没问题。然而,你的代码是非常难以阅读 - 我几乎能理解Dreamweaver中窒息吧:)

这里有一个简单的建议:

for($i=1; $i<=$npagine; $i++) 
    { 
    $class = ($i == $index ? "paginas" : "pagine"); 
    echo "<a class='$class' href='index.php?$splitter_zone&index=$i'>$i</a>"; 
    } 
1

不知道,但你使用的是短标签为PHP。它不像所有的安装都支持它。 short_open_tag必须打开才能使用短标签。

<?php 
// bla 
?> 

not 

<? 
//bla 
?> 
+0

批处理脚本用“<?替换PHP短打开标记? PHP的“http://stackoverflow.com/questions/684587/batch-script-to-replace-php-short-open-tags-with-php – Adam 2011-03-08 17:55:03

0

的PHP和HTML是罚款(fsvo “精”;对于一两件事,关闭smart-tags!)。 Dreamweaver不知道如何正确突出显示它。

0
for($i=1; $i<=$npagine; $i++) { 
    $class=$i==$index?"paginas":"pagine"; 
    echo"<a class='{$class}' href='index.php?{$splitter_zone}&index={$i}>{$i}</a>\r\n"; 
} 
+0

只是一个问题:为什么{$ class}而不是$类? – markzzz 2011-03-08 18:02:42

1

这是不妥的第一件事是,你应该使用<?php打开你的PHP代码,而不是仅仅<?。短表已被弃用,并且可能无法正常工作。

此外,不推荐使用打印输出的简写形式<?=。您应该使用<?php print<?php echo。 (是的,我知道它使代码更长...不要抱怨!;-))

这可能是什么打破了你的程序。新的PHP安装将会缩短PHP标签的格式。就这么简单。

但是,当我在这里...你有第二个问题是混合进出PHP和PHP的可怕混合。你应该清理你的代码,这样你就不必拥有太多的PHP小部分。这样做使得在PHP中使用HTML和你的大括号来跟踪你的标签几乎是不可能的。几乎可以保证会导致错误,并且在两年后回到错误修复时很难阅读。

为了解决这个问题,我建议编写代码更是这样的:

<?php 
for($i=1; $i<=$npagine; $i++) { 
    if($i==$index) {$class='paginas';} else {$class='pagine';} 
    .... //output your HTML here, without the if() condition embedded in it. 
} 
?> 

你可以简化甚至进一步使用三元运算符。

切换到长格式PHP标签<?php积极地阻止PHP和HTML之间的过度切换,所以您可能希望借此机会以更易读的形式重新编写代码。

在这种情况下,使用printecho来输出整个HTML标记没有任何问题,而不是切换到HTML模式来打印它。

所以,你最终可能会以这样的代码:

<?php 
for($i=1; $i<=$npagine; $i++) { 
    $class = ($index == $i) ? 'paginas' : 'pagine'; 
    print "<a class='{$class}' href='index.php?{$splitter_zone}&index={$i}>{$i}</a>"; 
} 
?> 

更简单,更容易阅读,我相信你会同意。

我要做的最后一点是我总是建议避免使用单字符变量名称,如$i。尝试使用更具描述性的内容来描述您使用的内容。这似乎是无害的,但想象一下,试图搜索一个大型程序$i找到一个错误。你会得到很多错误的点击。

+0

'<?='不再被弃用。 – 2017-04-23 02:14:56

+0

确实。感谢您的评论。然而,<?'开始标记*仍然被弃用。 – Spudley 2017-04-23 06:31:26