趁帝国8.0还没有发布,说说帝国那些老掉牙的代码

查看 16|回复 1
作者:美文苑文学网   
趁帝国8.0还没有发布,说说帝国那些老掉牙的代码。主要集中到编码处理e/class/doiconv.php这个文件。基本需要大改。首先看个片段。[ol]
  • $this->unicode_table = array();
  •                 while(list($key,$value)=each($tmp))
  •                 {
  •                         $this->unicode_table[hexdec(substr($value,7,6))]=substr($value,0,6);
  •                 }[/ol]复制代码PHP 4.0.0 开始支持 each(),但是从 PHP 7.0.0 开始,each() 函数已被弃用,并且在 PHP 8.0.0 中被移除。想想这是多古老的函数了。别小看这个会影响到帝国自带的全文搜索,支付,增加栏目生成拼音乱码等(php7.3+以上环境)所以帝国7.5建议PHP不能大于7.1是最合适的。
    那怎么解决呢,其实很简单的。使用 foreach就可以了,代码如下:
    [ol]
  • $this->unicode_table = array();
  •                                 foreach($tmp as $key=>$value)        
  •                 {
  •                         $this->unicode_table[hexdec(substr($value,7,6))]=substr($value,0,6);
  •                 }[/ol]复制代码实际帝国存在这片段的代码还有很多处的就不一一讲解了,另外帝国函数命名不规范(必需参数与可选参数顺序),数组键名不带单引号(PHP8+会直接终止运行的)等。说直接点要想帝国7.5UTF支持现在的PHP8+也就是需要把帝国以往的所有文件全部去修改一遍。因为帝国的数组键名都是没有带单引号的。顺便告诉个好消息,就算帝国8.0发布后,只要你有二次开发基本也需要全部修改您的二开代码。因为二开的作者大都是偷懒也没有注意这些兼容细节的。谨此提供需要的老坛们,望看见此贴的有二开帝国的站长重视下代码的规范写法。

    帝国, 代码

  • 美文苑文学网
    OP
      
    小编也就目前修改了大部分文件让其支持PHP8+能登陆后台能进行后台操作(主要还是太懒)。主要还是规范插件的写法,让帝国8发布后能让升级变得更快捷更轻松。
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部