require_once 返回 true 而不是预期的对象

Posted

技术标签:

【中文标题】require_once 返回 true 而不是预期的对象【英文标题】:require_once returns true instead of expected object 【发布时间】:2021-01-30 04:28:06 【问题描述】:

vendor/autoload.php 两个文件基本相同:

require_once __DIR__ . '/composer/autoload_real.php';

return ComposerAutoloaderInit1e055ec2de42b90d5e1653b608643281::getLoader();

在两个文件中:

$composer_object = ComposerAutoloaderInit1e055ec2de42b90d5e1653b608643281::getLoader();
var_dump($composer_object);
> object(Composer\Autoload\ClassLoader

这让我深入研究了 Composer 的自动加载文件(这很有见地),但我仍然感到困惑:

$var = require_once '/srv/path_to_main/vendor/autoload.php';
var_dump($var);
> boolean true

$var = require_once '/srv/path_to_subdir/vendor/autoload.php';
var_dump($var);
> object(Composer\Autoload\ClassLoader

为什么要求第一个文件返回boolean true,而不是object(Composer\Autoload\ClassLoader

更新

我创建了vendor/autoload.phpvendor/aught.php 的副本,当我需要它时,它会返回对象。

【问题讨论】:

我认为 require / include 返回的内容是从它需要/包含的文件返回的内容。我相信你说得对,因为你所包含的自动加载器没有指定退货。 IE 成功时为真/假,失败时出错。 php.net/manual/en/function.include.php#example-128 谢谢,@AlexBarker。这也是我的理解。但指定的自动加载器确实返回对象。并检查我的更新,当我复制文件并要求该文件时,它确实返回了预期的对象。 【参考方案1】:

require_once 返回true,而不是如果文件已被包含或需要,则返回值。

如果您需要两次,您会发现子目录之一的true

require_once '/srv/path_to_subdir/vendor/autoload.php';
$var = require_once '/srv/path_to_subdir/vendor/autoload.php';
var_dump( $var )

【讨论】:

以上是关于require_once 返回 true 而不是预期的对象的主要内容,如果未能解决你的问题,请参考以下文章

如果不是,则预匹配[重复]

返回预压缩的静态内容,而不是即时压缩它

php require_once 包含相对于文件而不是工作目录的文件

预解释是一种毫无节操的机制

在 Ruby 中,是不是有类似于 `any?` 的方法返回匹配项(而不是 `true`)

Django:BooleanField 返回“on”而不是 true?