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

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

ITMISS
浏览 365回答 2
2回答

胡说叔叔

方法可以执行 是因为class类被自动加载(spl_regists_autoload() __autoload() )进来了 但是变量或者常量,先引入包含,才能使用。

慕村225694

自动加载是在new SomeClass时,当前文件搜索不到该类,触发spl_autoload_register函数进行自动加载 如果没有new SomeClass时,此时目标文件是没有被require进来的,所以当前文件访问不到目标文件中的变量 自动加载是对于类添加的引入机制,全局变量可写在单独的配置文件中,然后在项目的引导(入口)文件中引入全局配置文件 ----------------更新---------------------------- 看了下composer的autoload源码 mylaravel/vendor/composer/autoload_real.php composer.json中的files是在 function composerRequire425b24fc62bbc5c7498e25c716f58d88($fileIdentifier, $file) { if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { require $file; $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; } } 这个函数中引入的,在函数内引入的文件的作用域是局部的,函数执行完毕局部变量就被释放了,变量访问的时候是全局的,而引入的文件中的函数已经注册到全局函数表中,因此函数可以正常访问 在引入的文件中使用$GLOBALS将变量注册到全局变量表中,因此可在函数外部访问
打开App,查看更多内容
随时随地看视频慕课网APP