我注意到添加我需要的文件夹的包含路径不足以访问课程。

我有一个文件夹应用程序/测试/包含应用程序/tests/test.php

类Test.php命名为未经任何前缀的测试

class Test {

}

如果我仅在包含路径中添加测试文件夹

realpath(APPLICATION_PATH . '/tests')

class test.php在控制器中不起作用

new Test()

那么,包括路径中的文件夹不够吗?

有帮助吗?

解决方案

@Stasm正确。但这是更多的解释。

include_path 告诉PHP在执行时如何看 include, , 一个 include_once, , 一个 require, ,或 require_once. 。当然,这些 includerequires总是引用特定的 文件.

自动加载专门用于丢失 课程. 。当代码中引用了尚未载的类时 - 通常,尽管不仅是通过调用 new 操作员,如您的示例 - 然后自动加载是一个可以使用用于加载类的算法来启动的过程。此过程通常涉及从缺失类的名称开始并产生可能的路径名的集合 - 在文件系统中绝对或相对于条目中的条目 include_path - 从失踪班的名称中,然后执行 include 希望班级定义位于其中一个。

在您的情况下,您呼吁一个名为“测试”的课程。包含此类的文件位于文件中 APPLICATION_PATH . 'tests/Test.php'. 。您已经放置了目录 APPLICATION_PATH . 'tests' 在里面 include_path. 。但是直到有一个自动加载算法,系统无法连接类名称 'Test' 到文件名 'Test.php'.

梨式班级名称惯例 将提供此连接。以及采用该约定的自动加载器(例如默认的Zend Framework Autolododer)可以执行从类名称到文件名的映射,然后 include 所需的文件。

作为最终的并发症,常规的Zend Framework目录布局约定将某些类放置在文件夹中 不是 在包含路径上:模型,表单,服务,控制器,查看助手,动作助手等。这就是为什么您经常会看到自动加载器的更多配置 - 通常在 Bootstrap 类 - 定义某些类名称和文件系统中某些位置之间的映射 离开include_path.

例如,一个名为“ default_model_user”的类可能 - 乍一看 - include_path 在文件中 'Default/Model/User.php'. 。但是标准的应用程序目录结构希望将该文件放在“应用程序/型号/user.php”中。注意复数 '楷模' 和小写 'M' 在路径名中,以及className中的“默认值”。为了理解这一点,需要在自动加载器上进行额外的配置,为className-to-filename映射提供了模式。这通常是通过 资源自动加载器.

希望这对您或其他人有帮助。干杯!

其他提示

包括路径显示PHP将在哪里查找即将包含的脚本 - 以便当您说 include('blah.php') PHP引擎会寻找 blah.php 在包括路径中的所有路径中。

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

realpath() 与任何一个无关,并且是返回给定文件的唯一文件系统路径的函数, .. 和符号链接解决了。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top