我可以将 "if" 语句与没有大括号的 "else" 部分一起使用吗?
can i use the "if" statement with the "else" part without the curly braces?
我正在尝试检查我们组织中某人曾经做过的代码,现在他走了,没有人可以帮助我。
我们在服务器中有一个自动部署 PHP 脚本,以帮助我们在进行推送时将服务器与 github 同步(webhooks)。
它曾经工作正常,但突然停止工作......
由于我对这种程序的经验很少,我发现服务器中的 PHP 代码在 github 中进行推送时应该可以工作,基本上它应该完成自动部署的整个过程.
问题是我检查了代码,发现有些奇怪;
if ($payload->ref === 'refs/heads/development')
{ echo 'received updated in dev branch; bash/deploy_frontend2dev.sh ';
exec('sh /var/www/html/bash/deploy_frontend2dev.sh', $output);
var_dump($output);
}
else
echo 'smth is called';
这里的"else"没有花括号。我知道有一种方法可以在没有大括号的情况下执行 "if" 语句,但是它是否只使用其中的一部分而不使用大括号?
另外,如果您愿意,这是来自 "exec" 的代码:
cd /var/www/html/ezmob-frontend/;
#echo "/var/www/html/ezmob-frontend/";
git pull origin development;
echo "pulling file from dev branch";
rm -R ../dashboard;
echo "dashboard is updated";
unzip ezmob-frontend-built.zip -d ../;
#echo "dashboard is updated";
chmod 777 -R dashboard;
请注意,我们在它工作时没有做任何更改,但它仍然突然停止自动部署...
谢谢。
一般来说,是的,你可以使用不带花括号的else。但正是为了避免您现在遇到的混淆,您应该考虑始终将 if 和 else 括在花括号中。
这是一个永无止境的讨论,所以请自己做出决定。这就是我认为您应该这样做的原因:
- 它可以防止人们在添加代码时认为它是 else 的一部分(因为缩进)而导致的错误。查看著名的 Apple SSL 错误:https://nakedsecurity.sophos.com/2014/02/24/anatomy-of-a-goto-fail-apples-ssl-bug-explained-plus-an-unofficial-patch/
- 它是统一的:所有的 if 和 else 总是有大括号,所以你一眼就能认出来
- 是explicit, rather than implicit。这是一个 Python 口头禅,但如果你喜欢它,你可以将它应用到任何你想要的地方。
这就是我认为这是个好主意的原因。但每一个他自己。你应该选择你认为最好的。
IF ELSEIF 和 ELSE 可以像这样在没有大括号的情况下使用。
if ($foo) :
echo 'ok';
elseif ($bar) :
echo 'ok';
else :
echo 'nono';
endif;
如果您的代码在 IF、ELSEIF 或 ELSE 中只有一行,那么您可以这样做:
if ($foo)
echo 'ok';
elseif ($bar)
echo 'ok';
else
echo 'nono';
if
和 else
接受一个代码块,该代码块可以是包裹在 {}
中的一系列语句或单个语句。
您可以使用
if
one-statement-ending-in-semi-colon;
或
if {
many-statements;
each-ending-in-semi-colons;
}
我正在尝试检查我们组织中某人曾经做过的代码,现在他走了,没有人可以帮助我。 我们在服务器中有一个自动部署 PHP 脚本,以帮助我们在进行推送时将服务器与 github 同步(webhooks)。 它曾经工作正常,但突然停止工作...... 由于我对这种程序的经验很少,我发现服务器中的 PHP 代码在 github 中进行推送时应该可以工作,基本上它应该完成自动部署的整个过程. 问题是我检查了代码,发现有些奇怪;
if ($payload->ref === 'refs/heads/development')
{ echo 'received updated in dev branch; bash/deploy_frontend2dev.sh ';
exec('sh /var/www/html/bash/deploy_frontend2dev.sh', $output);
var_dump($output);
}
else
echo 'smth is called';
这里的"else"没有花括号。我知道有一种方法可以在没有大括号的情况下执行 "if" 语句,但是它是否只使用其中的一部分而不使用大括号?
另外,如果您愿意,这是来自 "exec" 的代码:
cd /var/www/html/ezmob-frontend/;
#echo "/var/www/html/ezmob-frontend/";
git pull origin development;
echo "pulling file from dev branch";
rm -R ../dashboard;
echo "dashboard is updated";
unzip ezmob-frontend-built.zip -d ../;
#echo "dashboard is updated";
chmod 777 -R dashboard;
请注意,我们在它工作时没有做任何更改,但它仍然突然停止自动部署...
谢谢。
一般来说,是的,你可以使用不带花括号的else。但正是为了避免您现在遇到的混淆,您应该考虑始终将 if 和 else 括在花括号中。
这是一个永无止境的讨论,所以请自己做出决定。这就是我认为您应该这样做的原因:
- 它可以防止人们在添加代码时认为它是 else 的一部分(因为缩进)而导致的错误。查看著名的 Apple SSL 错误:https://nakedsecurity.sophos.com/2014/02/24/anatomy-of-a-goto-fail-apples-ssl-bug-explained-plus-an-unofficial-patch/
- 它是统一的:所有的 if 和 else 总是有大括号,所以你一眼就能认出来
- 是explicit, rather than implicit。这是一个 Python 口头禅,但如果你喜欢它,你可以将它应用到任何你想要的地方。
这就是我认为这是个好主意的原因。但每一个他自己。你应该选择你认为最好的。
IF ELSEIF 和 ELSE 可以像这样在没有大括号的情况下使用。
if ($foo) :
echo 'ok';
elseif ($bar) :
echo 'ok';
else :
echo 'nono';
endif;
如果您的代码在 IF、ELSEIF 或 ELSE 中只有一行,那么您可以这样做:
if ($foo)
echo 'ok';
elseif ($bar)
echo 'ok';
else
echo 'nono';
if
和 else
接受一个代码块,该代码块可以是包裹在 {}
中的一系列语句或单个语句。
您可以使用
if
one-statement-ending-in-semi-colon;
或
if {
many-statements;
each-ending-in-semi-colons;
}