Php 设置是否包括路径和自动加载两种不同的内容?

Php 设置是否包括路径和自动加载两种不同的内容?,php,zend-framework,autoload,zend-autoloader,Php,Zend Framework,Autoload,Zend Autoloader,我注意到,添加所需文件夹的include路径不足以访问这些类 我有一个文件夹application/tests/,其中包含application/tests/Test.php 类Test.php命名为Test,没有任何前缀 class Test { } 如果我只在include路径中添加tests文件夹 realpath(APPLICATION_PATH . '/tests') 类Test.php在控制器中不起作用 new Test() 那么,在include路径中包含文件夹还不够吗?i

我注意到,添加所需文件夹的include路径不足以访问这些类

我有一个文件夹application/tests/,其中包含application/tests/Test.php

类Test.php命名为Test,没有任何前缀

class Test {

}
如果我只在include路径中添加tests文件夹

realpath(APPLICATION_PATH . '/tests')
类Test.php在控制器中不起作用

new Test()

那么,在include路径中包含文件夹还不够吗?

include path显示了PHP将在何处查找它将要包含的脚本——因此,当您说include'blah.PHP'时,PHP引擎将在include路径中的所有路径中查找blah.PHP

自动加载是一种功能,当PHP检测到需要但未定义类时,允许调用某些函数。在这个函数中,您可以使用include路径来查找包含类的文件并加载它,但这是完全不同的


realpath与上述任何一个都不相关,它是一个返回给定文件的唯一文件系统路径的函数,包括。。解决了象征性的联系

Include path显示了PHP将在何处查找它将要包含的脚本,因此当您说Include'blah.PHP'时,PHP引擎将在Include路径中的所有路径中查找blah.PHP

自动加载是一种功能,当PHP检测到需要但未定义类时,允许调用某些函数。在这个函数中,您可以使用include路径来查找包含类的文件并加载它,但这是完全不同的


realpath与上述任何一个都不相关,它是一个返回给定文件的唯一文件系统路径的函数,包括。。解决了象征性的联系

@StasM说得对。但这里有更多的解释

include_路径告诉PHP在执行include、include_一次、require或require_一次时要查看的位置。当然,这些文件包括并要求始终引用特定的文件

自动加载专门针对缺少的类。当一个尚未卸载的类在代码中被引用时——通常,尽管不是排他地,通过调用新的操作符,如您的示例中所示——那么自动加载是一个过程,它可以启动一个加载类的算法。此过程通常涉及从缺少的类的名称开始,并从缺少的类的名称生成一组可能的路径名(文件系统中的绝对路径名或相对于include_路径中的条目的路径名),然后执行include,希望类定义驻留在其中一个路径名中

在本例中,您调用了一个名为Test的类。包含此类的文件位于文件应用程序路径中。'tests/Test.php”。并且您已将目录应用程序放置在路径中。”包含路径中的“测试”。但是,在自动加载算法到位之前,系统无法将类名“Test”连接到文件名“Test.php”

政府将提供这种联系。而采用这种约定的自动加载程序(如默认的Zend Framework自动加载程序)将能够执行从类名到文件名的映射,然后包含所需的文件

最后一个复杂问题是,传统的Zend Framework目录布局约定将某些类放置在不在包含路径上的文件夹中:模型、表单、服务、控制器、视图帮助程序、动作帮助程序、,这就是为什么您经常会看到更多的自动加载器配置—通常在引导类中—定义文件系统中某些类名和某些位置之间的映射,这些位置不在include_路径中

例如,乍一看,名为“Default\u Model\u User”的类可能位于文件“Default/Model/User.php”的include\u路径上。但是标准的应用程序目录结构希望将该文件放在“application/models/User.php”中。注意路径名中的复数“models”和小写“m”,以及类名中的默认值。为了理解这一点,需要在自动加载器上进行额外的配置,必须为类名到文件名的映射提供一个模式。这通常是通过一个简单的步骤来完成的


希望这些对你或其他人都有帮助。干杯

@StasM说得对。但这里有更多的解释

include_路径告诉PHP在执行include、include_一次、require或require_一次时要查看的位置。当然,这些文件包括并要求始终引用特定的文件

自动加载专门针对缺少的类。当一个尚未卸载的类在代码中被引用时——通常,尽管不是排他地,通过调用新的操作符,如您的示例中所示——那么自动加载是一个过程,它可以启动一个加载类的算法。此过程通常涉及从缺少的类的名称开始并生成 从缺少的类的名称中收集可能的路径名(文件系统中的绝对路径名或相对于include_路径中的条目的路径名),然后执行include,希望类定义驻留在其中一个路径名中

在本例中,您调用了一个名为Test的类。包含此类的文件位于文件应用程序路径中。'tests/Test.php”。并且您已将目录应用程序放置在路径中。”包含路径中的“测试”。但是,在自动加载算法到位之前,系统无法将类名“Test”连接到文件名“Test.php”

政府将提供这种联系。而采用这种约定的自动加载程序(如默认的Zend Framework自动加载程序)将能够执行从类名到文件名的映射,然后包含所需的文件

最后一个复杂问题是,传统的Zend Framework目录布局约定将某些类放置在不在包含路径上的文件夹中:模型、表单、服务、控制器、视图帮助程序、动作帮助程序、,这就是为什么您经常会看到更多的自动加载器配置—通常在引导类中—定义文件系统中某些类名和某些位置之间的映射,这些位置不在include_路径中

例如,乍一看,名为“Default\u Model\u User”的类可能位于文件“Default/Model/User.php”的include\u路径上。但是标准的应用程序目录结构希望将该文件放在“application/models/User.php”中。注意路径名中的复数“models”和小写“m”,以及类名中的默认值。为了理解这一点,需要在自动加载器上进行额外的配置,必须为类名到文件名的映射提供一个模式。这通常是通过一个简单的步骤来完成的


希望这些对你或其他人都有帮助。干杯

ZF的自动加载函数将类名映射到文件夹/文件路径。Ie:folder/models/db/connection.php中的类必须命名为model_db_connection zen,并自动将模型与类名中的模型匹配ZF的自动加载功能将类名映射到文件夹/文件路径。Ie:folder/models/db/connection.php中的类必须命名为model\u db\u connection zen,并在类名中自动将模型与模型匹配