PHP致命错误:Cannot use $this as parameter 问题求助
PHP致命错误:Cannot use $this as parameter 问题求助
嗨,这个问题其实很好解决,错误提示已经把原因说得明明白白啦:$this是PHP的保留关键字,绝对不能拿来当作函数的参数名称使用~
你看你代码里的before、between、after三个函数,都把$this作为了参数之一,这在PHP里是严格禁止的——因为$this是语言专门预留用来指代当前对象实例的变量,属于系统级别的保留字,自定义代码不能占用它。
至于为什么本地可能没报错,上传到Hostinger就出问题?大概率是本地的PHP版本比较旧,对这个语法限制没那么严格,而Hostinger用的PHP版本更规范(或者开启了严格模式),直接触发了致命错误。
具体解决步骤:
- 替换参数名:把所有函数参数里的
$this换成其他合法的、语义化的变量名,比如$searchVal、$startStr这类,避免和保留字冲突 - 同步修改内部引用:函数内部用到这些参数的地方,也要跟着改成新的变量名
- 修正潜在逻辑bug:顺便提一句,你
after函数里的判断!is_bool(strpos($inthat, $this))写法有问题,strpos返回的是匹配位置的整数(可能为0)或者false,正确的判断应该是strpos(...) !== false,否则当匹配内容在字符串开头时会出错
修改后的完整代码示例:
function before ($searchVal, $inthat) { return substr($inthat, 0, strpos($inthat, $searchVal)); } function between($startStr, $endStr, $inthat) { return before($endStr, after($startStr, $inthat)); } function after ($searchVal, $inthat) { $matchPos = strpos($inthat, $searchVal); if ($matchPos !== false) { return substr($inthat, $matchPos + strlen($searchVal)); } return ''; // 增加默认返回,避免无匹配时出现警告 }
把修改后的代码替换掉原文件里的对应部分,重新上传到Hostinger,这个致命错误应该就消失啦~
备注:内容来源于stack exchange,提问作者pharma inquiry
相关产品推荐
相关产品推荐

