本文共 862 字,大约阅读时间需要 2 分钟。
在升级进销存系统源码的过程中,我们遇到了一些需要解决的技术问题。下面将这些问题的解决过程和经验总结如下:
在PHP7版本中,原来的mysql扩展已经被弃用,使用会导致以下错误:
Uncaught Error: Call to a member function init() on null
这一问题的根本原因在于代码中使用了extension_loaded("mysql")来检测mysql扩展是否加载。由于PHP7已不支持mysql扩展,这一检测方法会返回false,导致后续操作失败。
解决方案是将mysql扩展替换为mysqli扩展。需要注意的是,这一更换不仅仅是简单的名称改变,所有原来依赖于mysql扩展的操作都需要改用mysqli的对应函数进行处理。例如,mysql_affected_rows()需要改为mysqli_affected_rows(),mysql_fetch_array()需要改为mysqli_fetch_array()等等。
在升级过程中,我们发现原有的Smarty模板类使用了PHP4的构造函数写法。这在PHP7中会导致以下警告:
Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP;
这意味着Smarty类的构造函数的定义方式已经不再支持,将来会被废弃。
解决方案是对Smarty类进行源码修改,将原来的构造函数__construct()的定义方式调整为PHP5+支持的方法。具体来说,就是将原来的构造函数名称保留(避免重复),并在类的定义中使用__construct()作为方法名。
在完成上述两项修改后,系统的整体运行环境就得到了有效的升级。通过对mysql扩展的替换和Smarty模板类的源码调整,我们成功地解决了系统运行中的关键兼容性问题。
转载地址:http://sutfk.baihongyu.com/