CI3.1.7升级PHP至7.1+出现Illegal string offset警告求解决方案
解决PHP7.1+/7.2下CodeIgniter 3的"Illegal string offset"警告
问题根源
你遇到的警告完全是因为控制器中$data的初始化类型错误:
public $data=""; // 这里把$data定义成了字符串类型
在PHP7.0中,这种试图给字符串使用数组偏移量的操作会被静默忽略(仅产生低级通知),但PHP7.1及以上版本对类型严格性做了提升,直接抛出Illegal string offset警告。
你的模型get_web_data方法返回的是正常字符串(+91.**********),这部分没有问题——问题出在你试图把这个字符串赋值给一个字符串变量的数组键,这在PHP7.1+里是不允许的。
解决步骤
只需要把控制器中$data的初始化从字符串改成空数组即可:
class Site extends CI_Controller { // 把""改成[],初始化空数组 public $data=[]; function __construct(){ parent::__construct(); $this->data["C_mobile_number"]=$this->site_model->get_web_data(1); } }
为什么这样能解决?
当$data是数组类型时,$this->data["C_mobile_number"]就是标准的数组键赋值操作,符合PHP的类型规则,在所有PHP版本(包括7.0/7.1/7.2)中都能正常运行。
额外验证
你可以在构造函数里加一行var_dump($this->data);,修改后会看到$data是一个包含C_mobile_number键的数组,而不是之前的字符串。
内容的提问来源于stack exchange,提问作者Rk dev tech




