/** * 资源 * * @access private * @static * @var object */ private static $resources; $rClass = new ReflectionClass($module); if ($argumentsLength == 1) { self::$resources->{$module_name} = $rClass->newInstance(); } else { array_shift($arguments); self::$resources->{$module_name} = $rClass->newInstanceArgs($arguments); }
我个人不喜欢在实例化参数后还要用类的方法来初始化成员变量,于是什么参数都写在了构造函数里面了。但是由于有时候自己也不是很确认有多少个参数,所以还是用反射类来解决了这个问题。
不过这时候就有问题了,这段代码在PHP 5.2里运行正常,但是到了PHP 5.4则报出了Warming:Creating default object from empty value这样的错误。
笔者英语不怎么样,这段错误信息大概的意思应该是在一个空的上实例化默认类(反射出来的类)。虽然对脚本的运行没有太大的影响,但是毕竟也是个Warming,还是好好地解决比较好。既然系统认为我这个$resources是一个空的值,那我不妨先将其实例化成一个空类,让后再赋值。
也就是这样:
self::$resources = new stdClass();
stdClass 是php 的standard class,实例化一个stdClass就是实例化一个空的类,这样就不会出现之前WARMING的提示了。
嘛,毕竟变量先初始化再使用才是好的习惯啊。