PHP-嵌套的If语句问题
我正在为我朋友的公司开发Wordpress主题,但这个问题都是关于PHP的,所以在这里写,等等 我有两个侧栏,这就是我们在Wordpress中显示侧栏的方式:PHP-嵌套的If语句问题,php,wordpress,loops,if-statement,Php,Wordpress,Loops,If Statement,我正在为我朋友的公司开发Wordpress主题,但这个问题都是关于PHP的,所以在这里写,等等 我有两个侧栏,这就是我们在Wordpress中显示侧栏的方式: if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('SidebarName') ) : endif; 这是一个if语句 好的,现在,如果$layout==“一”我想显示一个边栏,如果$layout==“二”等等,我想显示两个边栏 这段代码可以工作,但
if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('SidebarName') ) :
endif;
这是一个if语句
好的,现在,如果$layout==“一”我想显示一个边栏,如果$layout==“二”等等,我想显示两个边栏
这段代码可以工作,但它复制了侧边栏内容,我相信endifs会弄乱父循环或类似的内容:
if($layout="one") {
if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('Sidebar 1') ) :
endif;
} elseif($layout=="two") {
if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar(' Sidebar 1') ) :
endif;
if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('Sidebar 2') ) :
endif;
} elseif($layout=="three") { (...)
如何解决这个问题?当我删除主if循环时,一切都像预期的那样工作,所以我肯定我在上面的某个地方迷路了
对不起,输入错误,我使用$layout==而不是=看起来您的意思是在使用赋值运算符的地方使用相等运算符
=
if ($layout == "one")
// etc
顺便说一下,还要考虑使用更常见的<代码> I/OR PHP语法。不要使用elseif
和endif
使用此语法。根据你的习惯和喜好来支撑
if (condition)
{
// code for condition
}
else if (condition)
{
// code
}
else
{
// else case code
}
编辑:我刚做了一个测试,看起来这个答案是错的。我能够将冒号和大括号if和while语法混合在一起。然而,该手册并未说明: 注:在同一个系统中混合语法 不支持控制块。' 所以我对此有点困惑
PHP If语句有两种语法,一种是大括号,另一种是冒号
if () {
}
及
while、for、foreach等也有类似的语法,但不允许将大括号与冒号语法混合使用。因此,您需要将代码更改为
if($layout=="one") {
if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('Sidebar 1') ) {
}
} elseif($layout=="two") {
if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar(' Sidebar 1') ) {
}
if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('Sidebar 2') ) {
}
} elseif($layout=="three") { (...)
或
你可以在
编辑:我真傻,没注意到这一点。正如其他答案所说,您使用了一个等号而不是两个等号来测试相等性。没有所谓的“
if
循环”。)
由于您基本上只是一次又一次地重复相同的条件,因此可以逻辑地将其重新构造为:
if (function_exists('dynamic_sidebar')) {
switch ($layout) {
case 'one' :
dynamic_sidebar('Sidebar 1');
break;
case 'two' :
dynamic_sidebar('Sidebar 1');
dynamic_sidebar('Sidebar 2');
break;
case ...
}
}
这还应该考虑导致脚本行为不正常的语法/键入问题。我同意Michael的观点,而且,我不确定函数是如何设置的,但通常我会看到类似于
if($layout == "one" && function_exists('dynamic_sidebar'))
{
dynamic_sidebar('Sidebar 1');
}
首先,这是错误的:
if ($layout="one")
始终在if
语句中使用=
或==
(与elseif
相同),因为=
实际上分配了值。这可能是导致您的bug的部分原因
更好的是,在这种特殊情况下,使用
第三,你不必一直复制!函数存在(“动态侧栏”)
只需将其放入一次即可。应该是这样的:
if function_exists('dynamic_sidebar')
{
switch ($layout)
{
case 'one':
dynamic_sidebar('Sidebar 1');
break;
case 'two':
dynamic_sidebar('Sidebar 1');
dynamic_sidebar('Sidebar 2');
break;
// ...
}
}
更妙的是,将整个过程更改为一个数字,然后执行for循环:
if function_exists('dynamic_sidebar')
{
for ($i = 0; $i < $sidebarCount; ++$i)
{
dynamic_sidebar("Sidebar $i");
}
}
如果函数_存在(“动态_边栏”)
{
对于($i=0;$i<$sidebarCount;++$i)
{
动态侧栏(“侧栏$i”);
}
}
没有什么比if
循环更好的了。你对mainif
loop是什么意思?外部if
语句?这些函数在做什么?对我来说,有空的if
语句(或者你没有显示if
语句的内容)似乎是毫无用处的(也是不直观的)。当你说if循环时,我想你的意思是嵌套的if语句
代码的结构应该很好。我刚刚尝试了if(1){if(1):echo“foo”;endif;}
这很有效。这很有趣。手册特别指出:“注意:不支持在同一个控制块中混合语法。”我在使用大括号和冒号语法时也遇到过问题。也许这只是在冒号ifs中使用大括号ifs的问题。我在混合使用大括号和冒号语法时找不到任何问题。即使使用ifs和其他控制结构,如循环。这真的很奇怪,我发誓我以前有过问题。我将相应地编辑我的帖子。
if function_exists('dynamic_sidebar')
{
switch ($layout)
{
case 'one':
dynamic_sidebar('Sidebar 1');
break;
case 'two':
dynamic_sidebar('Sidebar 1');
dynamic_sidebar('Sidebar 2');
break;
// ...
}
}
if function_exists('dynamic_sidebar')
{
for ($i = 0; $i < $sidebarCount; ++$i)
{
dynamic_sidebar("Sidebar $i");
}
}