PHP中的临时表达式是什么?代码报错相关问题咨询
PHP里的"临时表达式"到底是什么?
先看你的代码问题:你用const定义了常量数组nums,然后尝试修改它的第一个元素,结果触发了那个致命错误。下面拆解这个问题:
错误的核心原因
const定义的常量本身就是不可修改的,但错误提示里的"临时表达式",指向的是PHP处理常量访问的底层逻辑——当你访问nums这个常量数组时,PHP不会返回直接指向原数组的引用,而是返回一个临时生成的数组副本。你试图给这个副本的元素赋值,就等于往一个"用完就被销毁的临时值"里写数据,这完全没有意义,所以PHP直接抛出错误阻止你。
什么是临时表达式?
简单说,临时表达式就是没有固定存储位置的计算结果。它只是程序运行过程中临时生成的一个值,没有对应的持久化内存地址,所以没法被赋值(赋值操作需要一个能存数据的"容器",也就是编程里说的"左值")。
类似的场景例子
除了常量数组,还有不少情况会碰到临时表达式:
- 旧版PHP(5及以前)里,直接给函数返回的数组赋值:
get_array()[0] = 10;,这时候函数返回的就是临时表达式,没法直接写入 - 对临时对象的属性数组赋值:
(new MyClass())->arr[0] = 5;,同样在旧版PHP里会触发类似错误
你的代码怎么改
如果需要能修改的数组,别用const,改用变量就行:
<?php $nums = [1, 2, 3]; $nums[0] = 50; // 正常运行
要是确实需要固定不变的数组常量,那记住别去修改它,常量的作用就是存储不会变更的值。
内容的提问来源于stack exchange,提问作者coderboy
相关产品推荐
相关产品推荐

