gpt4 book ai didi

拉拉维尔 4 : Why does my class autoload but global variables are not available

转载 作者:行者123 更新时间:2023-12-02 12:21:26 24 4
gpt4 key购买 nike

我已经自动加载了一个类,该类具有正确的命名空间和 PSR-0。我把它放在app/lib/CI中,类和它的文件名是相同的“DB”。类文件本身在实际类之前包含一个配置文件:

require( 'config.php' );

class DB {
// ...
}

该类显然是自动加载的,因为当我调用静态方法 connect 时,它确实会从::connect() 内部显示一条错误消息。问题是,包含的 config.php 中的全局变量在 class::method 中不可用。

所以,需要明确的是,数组 $connection_settings 位于 config.php 内部,但即使使用时:

global $connection_settings;

$connection_settings 未在 connect 方法内设置。

有趣的是,即使该类是自动加载的,如果我从routes.php 文件顶部包含该类,一切都会正常工作。那么,为了让自动加载按照我认为的“正常”方式工作,我做错了什么?

最佳答案

这是 Composer 的问题而不是 Laravel。 Composer 尽一切努力在自动加载期间不污染全局范围(在 #1297 中简要讨论)。如果您想强制使用全局变量,那么您应该在配置文件以及使用它们的任何函数中将它们声明为全局变量。

PHP Manual说:

Using global keyword outside a function is not an error. It can be used if the file is included from inside a function.

下面的代码适用于我(在 PHP 5.4.13 上使用 Laravel 4b4)。删除任一全局行都会破坏代码(以不同的方式)。

config.php

global $connection_settings;
$connection_settings = array(/* ... */);

数据库.php

require 'config.php';
class DB {
static function connect()
{
global $connection_settings;
// Do something with $connection_settings
}
}

关于拉拉维尔 4 : Why does my class autoload but global variables are not available,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15676353/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com