PHP7.1.17下jwage/purl库parse_str缺result参数适配方案问询
解决PHP 7.1中purl库parse_str()弃用警告的问题
你遇到的问题是PHP 7.1开始强制要求parse_str()必须传递第二个result参数,而jwage/purl库的doInitialize方法里还在使用旧的无参数写法,这就会触发弃用警告。
直接修改purl类里的doInitialize方法就可以解决,具体改法如下:
protected function doInitialize() { // 先创建一个空数组用来接收解析后的查询参数 $parsedQuery = []; // 给parse_str传入第二个参数,把解析结果存到$parsedQuery里 parse_str($this->query, $parsedQuery); // 直接把这个解析后的数组赋值给$this->data $this->data = $parsedQuery; }
为什么要这么改?
- PHP 7.1+ 不再允许
parse_str()直接把解析后的变量注入当前作用域,必须通过第二个参数指定数组来存储结果,否则会抛出E_DEPRECATED级别的警告。 - 原来的
get_defined_vars()写法其实不太严谨,它会把当前方法作用域里所有变量都取出来,而我们只需要解析后的查询参数数据,直接用$parsedQuery赋值更精准。
另外你自己写的postIndex方法完全不需要改动,问题的根源在purl库的这个初始化方法里,修改后就能正常运行啦。
内容的提问来源于stack exchange,提问作者handlerFive
相关产品推荐
相关产品推荐

