在方法中使用 require_once

Posted

技术标签:

【中文标题】在方法中使用 require_once【英文标题】:Using require_once inside a method 【发布时间】:2012-03-21 10:19:10 【问题描述】:

据我了解,使用require_once 之类的东西基本上会将代码从一个文件复制并粘贴到另一个文件中,就好像它最初在第一个文件中一样。 这意味着如果我要做这样的事情,那将是有效的

foo.php

<?php
require_once("bar.php");
?>

bar.php

<?php
print "Hello World!"
?>

运行php foo.php 只会输出"Hello World!"

现在我的问题是,如果我在方法中包含require_once,那么包含的文件会在加载脚本时加载,还是仅在调用方法时加载? 如果仅在调用该方法时,在性能方面是否有任何好处。还是和我把所有代码都放在一个大文件里一样。

我主要是问,因为我创建了一个处理大量调用的API 文件,我不想简化文件。 (我知道我可以通过创建单独的类来做到这一点,但我认为这很高兴)

(对不起,如果已经问过这个问题,我不确定要搜索什么)

【问题讨论】:

【参考方案1】:

1) 仅当方法被调用时。

2) 我想动态加载有一个无​​形的好处,因此 PHP 解释器在不使用时不必解析额外的代码。

【讨论】:

Re: 2. 这是内存与性能的问题(尤其是在使用操作码缓存时)。按需加载代码可以节省内存,但需要更多处理并且更难缓存。 谢谢,这就是我需要知道的。我以前没有想过缓存是如何工作的。谢谢。【参考方案2】:

它只会包括方法被调用的时间,但是你看过autoloading吗?

【讨论】:

【参考方案3】:

我通常使用 include('bar.php');我在使用数据库信息时使用它,我有一个名为 database.php 的文件,其中包含登录信息,当文件加载时它会立即调用它。我不需要调用该功能。它可能不是最有效和最有效的,但它对我有用。您也可以使用 include_once ... include 基本上可以执行您想要的操作,它会复制代码 essencially..

【讨论】:

【参考方案4】:

正如其他人所提到的,是的,它包括即时。

但是,请注意变量定义(从方法中require()ing 将只允许访问该方法范围内的局部变量)。

请记住,您还可以从包含的文件中返回值(即字符串),以及使用ob_start() 等进行缓冲区输出。

【讨论】:

以上是关于在方法中使用 require_once的主要内容,如果未能解决你的问题,请参考以下文章

xctest 如何在另一种测试方法中使用在一种测试方法中捕获的数据

如何在 kotlin 中使用非静态方法?

我们可以在抽象类中使用静态方法吗?

使用 Mockery 模拟在另一个静态方法中调用的静态方法

在 Dao 类中使用静态方法还是非静态方法?

模型类(在 MVC 中)应该使用静态方法还是实例方法?