Php 在if语句中查找类的特殊条件?

Php 在if语句中查找类的特殊条件?,php,Php,让我们直接跳到一些上下文代码。请阅读以下内容 (1) 这很好: new myClass(); class myClass{ // Stuff } (2) 不工作(未找到致命错误类): (3) 上述问题的解决方案: if ($_POST['apikey'] == "foo") { class myClass{ // Stuff } new myClass(); } 我真的不明白为什么我需要做我所做的来修复它。我知道这是一种脚本

让我们直接跳到一些上下文代码。请阅读以下内容

(1) 这很好:

new myClass();

class myClass{
    // Stuff
}
(2) 不工作(未找到致命错误类):

(3) 上述问题的解决方案:

if ($_POST['apikey'] == "foo") {        
    class myClass{
        // Stuff
    }

    new myClass();
}

我真的不明白为什么我需要做我所做的来修复它。我知道这是一种脚本语言,但为什么(1)会起作用呢?是不是php中的某种生活质量功能在我开始将其嵌套在if语句或类似语句中时就不起作用了?

php会在脚本运行之前编译和解析脚本。因此,它在开始执行脚本之前就知道了定义

如果您有条件定义,这将被阻止,因为在执行脚本之前,编译器不可能知道该条件等于什么


在我看来,永远不要在条件中定义类、函数或常量。这就是变量的用途。

有条件地创建类和函数是一种不好的做法,会导致大量的调试问题。您应该将类放在它们自己的文件中,并使用自动加载程序加载它们(延迟加载=除非您使用它们,否则不会包含它们)。然后它们也可以重用,这是您当前的解决方案所不允许的;有条件地定义类通常不是一个好主意,带有自动加载程序的类文件效率更高。在某些情况下,这是可以接受的。例如,用于代码生成或其他特殊的事情。但前提是你知道它是如何工作的。
if ($_POST['apikey'] == "foo") {        
    class myClass{
        // Stuff
    }

    new myClass();
}