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.php
、vendor/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 包含相对于文件而不是工作目录的文件