如果我有这样的代码
if($abc==true) {
//code code code
} else {
// other code, other code
}
因此,如果$abc
为true
,那么"其他代码"被编译?
如果有很多"代码"那么这就无关紧要了。表现明智吗?
答案 0 :(得分:6)
PHP是在运行时解析(因此“编译”)。无论可达性如何,都会处理所有代码。例如:
<?php
echo "Hello, World!";
exit;
DERP!!
?>
使用Parse Error会失败,而不是打印“Hello,World!”,即使无法达到derp。
答案 1 :(得分:2)
是的,它将被编译(实际读取,标记化和解析); PHP无法知道$abc
在运行时将采用什么值。
你可以通过在IFs中使用include()来稍微减少负载(但只有当它真的是很多代码!)时才会这样做:
if (condition)
{
include('true.php');
}
else
{
include('false.php');
}
但请注意,这样您将加载两个文件而不是一个。通常,额外文件的开销使得游戏不值得付出努力。
但是,如果IF真的是很多代码,那么将它分成几个文件可能是一个好主意维护。重构以从程序流中删除IF会更好!
答案 2 :(得分:1)
尽管整个代码在运行时“解析”了错误,但代码流只会在“if”点的一个方向上进行,因此基本上没有速度性能问题。
这真的不值得担心,特别是因为诸如'if'之类的流控制语句可能是编程中最重要的元素。没有它们,你真的无法实现。
答案 3 :(得分:1)
您关注哪些性能问题? PHP是一种解释型语言,这意味着您的文件在每次请求时都会被解析,标记化并执行。无论如何,整个文件都需要进行语法错误的解析和标记。执行的内容取决于您的控制流语句,例如示例中的 if 。
如果您担心额外的解析,可以根据控制流语句的结果重构代码以包含另一个文件。
$x = 1;
if($x === 1) {
include_once './myFile.php';
}
else {
// Something Else.
}
虽然我无法想到与表现相关的一个巨大原因,为什么你会这样做。