《PHP应用:ECshop 迁移到 PHP7版本时遇到的兼容性问题》要点:
本文介绍了PHP应用:ECshop 迁移到 PHP7版本时遇到的兼容性问题,希望对您有用。如果有疑问,可以联系我们。
在 PHP7 上安装 ECShop V2.7.3时,报错!PHP编程
Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; ECS has a deprecated constructor in /usr/local/nginx/html/ecshop/upload/includes/cls_ecshop.php on line 25PHP编程
PHP编程
这个报错的原因是 PHP7 不再支持与类名相同的构造办法,构造办法统一使用 __construct(), 比如下面的写法 PHP7 就会报这个错误.PHP编程
<?php class foo { function foo() { echo 'I am the constructor'; } } ?>
回到 ecshop 我们看一下 cls_ecshop.php 文件的25行.如下PHP编程
PHP编程
果然有与类名相同的构造办法,我们将构造办法 ECS 修改为 __construct,PHP编程
PHP编程
回到 ecshop 的安装首页刷新,发现已经没有错误了.PHP编程
PHP编程
单击下一步,报错PHP编程
Deprecated: Non-static method cls_image::gd_version() should not be called statically in /usr/local/nginx/html/ecshop/upload/install/includes/lib_installer.php on line 31PHP编程
PHP编程
这个报错的原因是静态调用非静态办法,比如下面的代码就会报这个错误PHP编程
<?php class foo { function bar() { echo 'I am not static!'; } } foo::bar(); ?>
修改办法也很简单,要么将该办法改为静态办法,要么将该调用改为非静态调用. 我们看一下报错的文件 lib_installer.php 的 31行代码PHP编程
PHP编程
还有cls image类文件的 gd version() 办法,可以看到的确没有使用 static关键字PHP编程
PHP编程
第一种修改方式,将该办法修改为静态办法,在办法前加关键字 public staticPHP编程
PHP编程
第二种修改方式,采用非静态方式的调用,修改lib_installer.php 的 31行代码PHP编程
PHP编程
这两种办法都可以解决问题. 回到ecshop的安装步骤第二页,错误提示已经不见了.PHP编程
PHP编程
再下一步悲剧了,PHP7 不支持原始的 mysql api 了,PHP7 支持更好的 Mysqli API 和 pdo_mysql api 所以 ecshop 不改掉操作 mysql 的 api 是无法在 PHP7 上运行起来了.PHP编程
PHP编程
OneAPM for PHP 能够深入到所有 PHP 应用内部完成应用性能管理 能够深入到所有 PHP 应用内部完成应用性能管理和监控,包括代码级别性能问题的可见性、性能瓶颈的快速识别与追溯、真实用户体验监控、服务器监控和端到端的应用性能管理.PHP编程
以上所述给大家分享了ECshop 迁移到 PHP7版本时遇到的兼容性问题,希望对大家有所赞助.PHP编程
维易PHP培训学院每天发布《PHP应用:ECshop 迁移到 PHP7版本时遇到的兼容性问题》等实战技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培养人才。
转载请注明本页网址:
http://www.vephp.com/jiaocheng/7545.html