看来不是我一个人遇到这个问题。
IDE 报语法错误,$loader 在别的类里面使用了私有成员。
但是这个代码可以运行。
先说一下为什么会有autoload_static.php 这个文件,代码里面其实有说明。
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION');
if ($useStaticLoader) {
require_once __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInit8a7582a76d95760eed90a5b1afa5a110::getInitializer($loader));
}
// ...
composer的releases的说明中有写到
Optimized the autoloader initialization using static loading on PHP 5.6 and above, this reduces the load time for large classmaps to almost nothing
在composer 1.1.0 版本开始如果php的版本大于5.6 ,composer 会进行加载优化。
那么问题来了,IDE报这个语法错误其实是误报了,关键在这个Closure::bind 方法上。
可以看一下手册的解释,bind方法手册 。 手册上说的一堆bulabula,我也不是看很明白~
写了demo模拟下这个getInitializer方法,结果是确实闭包里面可以访问和修改它use 的那个对象的私有属性,代码是可以正常运行的。
总结:
活到老学到老。。。。