gpt4 book ai didi

php - GOTO 和 THROW 的区别?

转载 作者:可可西里 更新时间:2023-11-01 13:02:26 25 4
gpt4 key购买 nike

最近很多人指责我只提到了一个词——“goto”。
这让我想知道,为什么它被认为是一个如此讨厌的词。
我知道之前有几次关于该主题的讨论,但它并不能说服我 - s ome of the answers just says "it's bad" not even trying to explain还有一些带来reasons, irrelevant for scripting languages like PHP, IMO .

无论如何,我要问一个非常特殊的问题:
让我们比较一下 gotothrow 语句。
在我看来,两者都做同样的事情:根据某些条件避免执行某些代码部分。
如果是这样 - throw 和 goto 有同样的缺点吗? (如果有的话)?
如果不是 - 那么区别就在于此。

有足够经验的人,谁能说出以下两个代码片段的代码结构之间的基本概念差异?
关于这些非常代码片段,而不是“理论上”或“一般”或“这是一个不错的 XKCD 漫画!”。
为什么第一个被认为是杰出的,而后一个被认为是最致命的罪过?

#$a=1;
#$b=2;

/* SNIPPET #1 */

try {
if (!isset($a)) {
throw new Exception('$a is not set');
}
if (!isset($b)) {
throw new Exception('$b is not set');
}
echo '$a + $b = '.($a + $b)."<br>\n";
} catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "<br>\n";
}

/* SNIPPET #2 */

if (!isset($a)) {
$message = '$a is not set';
goto end;
}
if (!isset($b)) {
$message = '$b is not set';
goto end;
}
echo '$a + $b = '.($a + $b)."<br>\n";

end:
if (!empty($message)) {
echo 'Caught exception: ', $message, "<br>\n";
}

请注意,我知道 throw 在 制作意大利面条 时更加强大和灵活。这对我来说没有主要区别。这是使用问题,而不是概念问题。

编辑
很多人告诉我第一个例子应该更新使用。
原因:异常应该只是用来处理错误,而不是用来实现业务逻辑。
看起来很合理。

因此,停止无用代码执行的唯一方法就是goto(更不用说一些替代品,例如while,return等,它们是同样的事情但更难实现)?

最佳答案

Throw/catch 比 goto 灵活得多:您可以从调用抛出异常的代码的函数中捕获。此外,所需的析构函数会自动调用。

关于php - GOTO 和 THROW 的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3329390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com