WordPress 3.0.1 之前是在 xampp 1.7.1 中运行的,没什么问题,php 版本为 5.2.9。后来升级 xampp 到 1.7.3 版,打开网站最上方出现提示:
Deprecated: Assigning the return value of new by reference is deprecated in C:\xampp\htdocs\footnoted\wp-content\plugins\simple-tags\inc\client.php on line 1700
这是插件 simple-tags 里的代码,定位到该行是:
$error = & new WP_Error('invalid_taxonomy', __('Invalid Taxonomy'));
而 WP_Error 是用 function 进行定义的:
function WP_Error($code = '', $message = '', $data = '')
应该是说对于函数已不推荐使用 new 的方式了,不该再向 js 学习的。php 中就该用 class 来定义类的,检查到 xampp 中 php 版本是 5.3.1。
解决办法呢,你当然可以把其中的 php 换成 5.2 的版本的,那能不能改 php.ini 配置来屏蔽那个提示呢?Of course, 在 php 5.3 中除了原来的 E_NOTICE、E_ERROR 等,还引入了 E_DEPRECATED 和 E_USER_DEPRECATED 两种错误报告类型。
其实 php.ini 本身的内容是最好的资料,对所有的错误报告类型都有说明的。一种极端的做法是把原来的
display_errors = On 改为
display_errors = Off
然后 Apache 重启一下,这样,所以的错误都不显示了,自然前面的那个 deprecated 提示也没有了。
那就是只要在 php.ini 中修改
error_reporting = E_ALL & ~E_NOTICE 为
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED
在 php.ini 里注释是建议生产环境中设置 error_reporting 为
error_reporting = E_ALL & ~E_DEPRECATED
最后,如果你仍然收到 Deprecated 的警示,那一定是你的程序中用 error_reporting() 函数覆盖了 php.ini 中的设置,比如代码中用了
error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING);
那就得把该函数参数里加上 ~E_DEPRECATED,即要写成
error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING & ~E_DEPRECATED);
用了 error_reporting() 函数进行了全局设置的话,可以不依赖于 php.ini 中的配置。
参考:1. Runtime Configuration
2. error_reporting
本文链接 https://yanbin.blog/xampp-php5-3-deprecated/, 来自 隔叶黄莺 Yanbin Blog
[版权声明] 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。
twitter people to follow
xampp 错误:Deprecated: Assigning the return value of new by reference is deprecated | 隔叶黄莺 Unmi Blog - 软件编程实践