PHP5升级PHP8报错:非静态方法fileio::read_file()无法静态调用
问题解决步骤
核心错误原因
PHP8严格禁止静态调用非静态类方法,原代码中sb_read_file函数用fileio::read_file($filename)静态方式调用了fileio类中的非静态read_file方法,这在PHP5中可能被宽松允许,但PHP8直接抛出错误。
另外你错误地给全局函数read_config添加了static修饰——PHP中static仅用于类的方法/属性,全局函数不能使用该关键字,这导致了语法错误。
解决方案
1. 修复静态调用非静态方法的问题
有两种可行方案,选其一即可:
方案A:将fileio类的read_file方法改为静态方法
找到fileio类的read_file方法定义,添加static关键字:
class fileio { // 给方法添加static修饰 public static function read_file($filename) { // 原方法的实现代码保持不变 } }
方案B:实例化fileio对象后调用实例方法
修改sb_read_file函数,先创建fileio类的实例,再调用read_file方法:
function sb_read_file( $filename ) { $fileioObj = new fileio(); return $fileioObj->read_file($filename); }
2. 回滚read_config的错误修改
将read_config改回原本的全局函数形式,去掉错误添加的static关键字:
function read_config ( ) { // Read config information from file. global $blog_config; $blog_config = array(); // LOAD CONFIG INFORMATION $contents = sb_read_file( CONFIG_DIR.'config.txt' ); if ( $contents ) { $temp_configs = explode('|', $contents); $config_keys = array( 'blog_title', // ... 后续原有代码保持不变 }
内容的提问来源于stack exchange,提问作者Cain Nuke
相关产品推荐
相关产品推荐

