php5 Godaddy服务器中的PHP4“聚合”函数


PHP4 `aggregate` function in php5 Godaddy server

我的任务是在共享GoDaddy服务器上将旧的PHP4.3站点(使用CVS版本控制)迁移到更现代的5.2安装(由于兼容性问题,版本号更低)。我已经解决了大部分问题,但这个问题很难解决。

在管理视图中,有一个导出到excel的函数,它使用Spreadsheet_excel_Writer(0.9.3)PEAR包。然而,这条线不断抛出一个致命错误:

aggregate( $sheet, 'Spreadsheet_Excel_Writer_Sheet_Patch' );

其中$sheet由定义

$sheet =& $xls->addWorksheet( 'Customer Data' );

我的问题是,PHP5中不再存在aggregate,并且我无法安装runkit,因为我没有在服务器上执行pecl install命令的root权限。

我宁愿不必重写现有的功能,那么有没有aggregate的替代品可以在不需要root权限的情况下安装?

对于您正在使用的Excel库,您需要将其升级到支持PHP5的版本,或者迁移到其他库。有几个可用的Excel库确实支持最新的PHP版本,所以您可能应该研究一下这些库。

我现在不会推荐任何特定的图书馆,因为我已经有一段时间没有和他们合作了,所以我的推荐可能不是最好的。无论如何,你的需求可能与我的不同。相反,只需在谷歌上搜索"php-excel"就会得到大量结果,帮助您找到适合自己的库。很明显,您需要在代码使用旧库的地方重写代码,使其与您选择的任何新库一起工作,但这将比尝试使旧库本身工作容易得多。(此外,较新的库将支持较新的excel版本,这可能非常重要;事情确实在继续)

我当然不建议继续使用现有的图书馆;它显然是为PHP4编写的,要更新它可能是一项非常困难的任务。

你提到了runkit:即使你能使用它,这也不太可能是一个好的解决方案。为了更接近aggregate()函数的功能,你可能想研究Reflection类,它允许一些类似的类和对象级别的技巧,但总的来说,写得好的代码无论如何都不应该需要这种东西(它可能在PHP4时代就已经完成了,但现在更不需要了)。

aggregate()的另一个替代方案可能是PHP 5.4及更高版本中的Traits功能。这可以提供aggregate()有时用来模拟的一些多继承功能。显然,您需要升级到5.4,而实际编写的代码会大不相同。