如何解决在Laravel中将全局变量视为null,但在正常的PHP中可以正确看到
pure-php.php
<?php
`
$var = 'OK!';
function my_function()
{
global $var;
echo !is_null($var) ? $var : '$var is null';
}
my_function();
结果:
OK!
现在来看一下:
app/Helpers/global.php
$var = 'OK!';
function myfunction() {
global $var;
echo !is_null($var) ? $var : '$var is null';
}
composer.json
...
"autoload": {
"psr-4": {
"App\\": "app/"
},"files": [
"app/Helpers/global.php"
],...
然后我做了composer dump-autoload
。
app/routes/web.php
<?php
use Illuminate\Support\Facades\Route;
Route::get('/',function () {
dump('before');
myfunction();
dump('after');
});
before
$var is null
after
:-/
我想知道为什么我们无法获取变量的值?
解决方法
首先,在您的laravel代码中,它位于PHP闭包或匿名函数中,但在您的pure-php.php
中,它只是一个普通的PHP函数。因此,要使用$var
,您需要执行以下操作:
$var = 'OK!';
Route::get('/',function () use ($var) {
echo !is_null($var) ? $var : '$var is null';
});
第二,在路由文件中具有全局变量对我来说没有任何意义,并且可以在任何地方使用。如果您要使用全局变量,则有很多更好的方法。
更新
这是Composer自动加载而不是Laravel的默认行为。它与Laravel无关。 Composer会尽一切努力在自动加载过程中不污染全局范围。如果要强制使用全局变量,则应在配置文件中将它们声明为全局变量。
例如:
创建config/helper.php
<?php
return [
'foo' => 'bar',];
然后您应该这样做:
function myfunction()
{
return config('helper.foo');
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。