require_once是否正确? 你在哪里以及如何把它包括在路径中?
它不应该在application.ini或bootstrap中吗?
示例:
require_once 'Zend/View/Helper/Abstract.php';
// @question - is this correct - where and
// how would you put it include path
class Zend_View_Helper_Translate extends Zend_View_Helper_Abstract
{
}
答案 0 :(得分:3)
一般来说,您可以通过恰当地使用require_once
来完全避免Zend_Loader_Autoloader
次来电。当然,关键是“合适”。
通常,您的public/index.php
会将include_path
设置为library
文件夹。然后,如果您使用Zend_Application
,则Zend_Loader_Autoloader
已注册,以使用autoloadernamespaces
中的application/configs/application.ini
数组找到已注册名称空间前缀的任何PSR-0 compliant classes。< / p>
棘手的部分是在不“驻留在include_path”的文件中定义的类,如application/models
中出现的模型,驻留在application/services
中的服务等。即使类在那里定义的倾向于遵循PSR-0标准,PSR-0映射相对于基数 off 发生这一事实include-path意味着系统必须知道classname前缀和基本路径之间的映射。这就是resource autoloaders的用武之地。这些资源自动加载器通常在扩展Zend_Application_Bootstrap_Bootstrap
的应用程序Bootstrap和扩展Zend_Application_Module_Bootstrap
的模块引导中自动设置。
查看帮助程序是驻留在“include_path”之外的类的另一个示例,可能类似于application/views/helpers
。由于这些通常使用简短形式$this->someHelper($someParam)
在视图脚本中调用,因此必须告知系统如何从此短名称生成完全限定的类名。这是使用$view->addPrefixPath()
来完成的,Zend_Loader_Autoloader
将名称空间前缀映射到文件系统位置。同样,应用程序级和模块级引导机制为您设置了大部分内容。
对于不遵循PSR-0标准的库/类,您可以创建custom autoloaders并将它们(通常在Bootstrap)附加到include/require
单例。这是唯一一个明确包含/要求的地方。
tl; dr:正确使用现有的ZF自动加载器机制,您几乎不需要在自己的应用程序代码中使用{{1}}语句。
答案 1 :(得分:-1)
在这种情况下不正确。
首先,请使用Zend Tool。它将创建您不知道如何创建自己的文件。它将创建正确的类名,适当地扩展它们并require_once
可能需要的任何内容。
不要将require_once
放在引导程序中。您希望它仅在需要时执行,而不是每次请求都执行。
至于你提供的例子,正确的版本是:
require_once "Zend/View/Interface.php";
class Zend_View_Helper_Foo extends Zend_View_Helper_Abstract {
}
由帮助程序扩展的类是自动加载的,并且将它放在require_once
中什么都不做。