为了账号安全,请及时绑定邮箱和手机立即绑定

用composer引入一个函数文件后,方法可以执行,为什么变量获取不到?

用composer引入一个函数文件后,方法可以执行,为什么变量获取不到?

蝴蝶不菲 2019-05-24 09:55:35
用composer引入一个函数文件后,方法可以执行,为什么变量获取不到?
查看完整描述

2 回答

?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

自动加载是在newSomeClass时,当前文件搜索不到该类,触发spl_autoload_register函数进行自动加载
如果没有newSomeClass时,此时目标文件是没有被require进来的,所以当前文件访问不到目标文件中的变量
自动加载是对于类添加的引入机制,全局变量可写在单独的配置文件中,然后在项目的引导(入口)文件中引入全局配置文件
----------------更新----------------------------
看了下composer的autoload源码
mylaravel/vendor/composer/autoload_real.php
composer.json中的files是在
functioncomposerRequire425b24fc62bbc5c7498e25c716f58d88($fileIdentifier,$file)
{
if(empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])){
require$file;
$GLOBALS['__composer_autoload_files'][$fileIdentifier]=true;
}
}
这个函数中引入的,在函数内引入的文件的作用域是局部的,函数执行完毕局部变量就被释放了,变量访问的时候是全局的,而引入的文件中的函数已经注册到全局函数表中,因此函数可以正常访问
在引入的文件中使用$GLOBALS将变量注册到全局变量表中,因此可在函数外部访问
                            
查看完整回答
反对 回复 2019-05-24
?
三国纷争

TA贡献1804条经验 获得超7个赞

方法可以执行是因为class类被自动加载(spl_regists_autoload()__autoload())进来了
但是变量或者常量,先引入包含,才能使用。
                            
查看完整回答
反对 回复 2019-05-24
  • 2 回答
  • 0 关注
  • 615 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号