在PHP中,类定义的顺序重要吗?

在PHP中,类定义的顺序重要吗?,php,Php,如果我在不同的php文件中有几个类,并将它们包含在一个文件中,并且其中一些类依赖于其他类,那么它们包含的顺序是否重要?或者,在它们被使用之前简单地包括它们(以任何顺序)?在它们需要之前简单地包括它们,一切都会好起来。是的,这很重要。这在文档中作为注释提到: 除非使用自动加载,否则必须在使用类之前定义它们。如果一个类扩展了另一个类,那么父类必须在子类结构之前声明。此规则适用于继承其他类和接口的类 我建议使用来解决类依赖关系。这样,类只在实际需要时才加载,您不必手动包含每个PHP文件 但是,您必须将

如果我在不同的php文件中有几个类,并将它们包含在一个文件中,并且其中一些类依赖于其他类,那么它们包含的顺序是否重要?或者,在它们被使用之前简单地包括它们(以任何顺序)?

在它们需要之前简单地包括它们,一切都会好起来。

是的,这很重要。这在文档中作为注释提到:

除非使用自动加载,否则必须在使用类之前定义它们。如果一个类扩展了另一个类,那么父类必须在子类结构之前声明。此规则适用于继承其他类和接口的类

我建议使用来解决类依赖关系。这样,类只在实际需要时才加载,您不必手动包含每个PHP文件


但是,您必须将每个类都保存在它自己的文件中,这样才能工作。但无论如何,这是保持一切整洁的好方法。

如果一个类试图使用另一个尚未解析的类,那么就会发生错误。最好的选择是将类放在脚本中,这样依赖性仍然保持不变。

如果它们都在同一个文件中,那么顺序应该无关紧要。有一些罕见的实例(我在名称空间中见过)顺序确实很重要,但不要太担心这一点,除非你已经达到了极限


试试看。最糟糕的情况是,它会给您一个错误…

在一个PHP文件中,您可以在任何地方声明函数/类,并在任何地方调用它们(在该文件中),顺序无关紧要


至于include,您必须先包含该文件,然后才能尝试在该文件中使用已声明的函数/类。

是的,这很重要,当涉及大量类时,可能会导致问题。当您的生产脚本需要包含40或50个类时,使用自动加载是不可行的,如果您的应用程序按照最佳OOP实践进行了正确设计,并且您需要处理表单等,则这种情况总是存在的

让我解释一下为什么顺序很重要。如果使用自动加载程序,则每次找到关键字extends时,都会尝试自动加载类。因此,如果在定义要扩展的类之前进行扩展,它将触发自动加载事件

开发应用程序时,请使用自定义自动加载程序。让自定义自动加载器为您提供有关所用时间和内存的信息。它将一个接一个地加载所有类文件,这样做会浪费很多时间。应用程序完成后,可以通过将多个相关类集中到一个文件中来进行优化。例如,我的表单类位于class.form.php中,它不只是加载表单类。它加载另外50个与表单相关的类。因此,我将所有内容都放在一个文件中,当我创建一个新的form()时,autoloader将加载class.form.php,其中包括表单通常需要的其他类(form_复选框、form_输入等),因此当需要它们时,它们不是autoloader,因为它们已经定义好了

您可以创建一个PHP脚本,该脚本将递归,解析依赖项,并在单个类文件(使用我的示例为class.form.PHP)中对所有类进行排序,以便在找到extends关键字(触发自动加载)之前定义所有类的父类。我在连接的文件上运行php-w,该文件将删除注释和空格。它将我的形式课程从80K减少到18K。每当我使用一个表单时,我都会创建一个新的表单(),它会加载18K的表单相关类,这并不过分


最初我使用linux命令cat,但它不起作用。您需要一个更智能的脚本,它可以解析每个扩展类的父类,并在包含许多相关类的文件中正确排序类。

那么,您是说,即使我在使用它们之前包含我需要的每个文件和依赖项,也可能会因为包含它们的顺序而出现问题吗?是的,记录你所有的收入是很烦人的。自动加载还可以提高性能,因为它只加载脚本实际需要的内容。加载PHP文件通常是一个I/O操作,速度非常慢。这就是composer是如何介绍给Laravel的。这是一个简单地尝试就能最好地回答的问题。我确实尝试过,它似乎工作正常。然而,由于对PHP比较陌生,我想确保没有任何问题会影响到我以后的工作。想想最流行的PHP框架的创建者仅仅在5年前对PHP来说是“相对较新的”。。。@taylorotwell将所有内容保存在一个文件中对于小项目来说似乎很舒服,但是它禁止您重用软件的部分内容,并且您必须始终加载整个内容,即使您实际上没有使用所有的类/函数。这是对性能的极大浪费。如果您使用的是自动加载器,则包含多个类的文件需要按层次对类进行排序。否则您将出现错误。看起来您试图手动执行的操作是自动执行的。