如何将多句define语句合并为单行?改写后代码无效求助
问题分析与解决方案
嘿,我来帮你搞清楚这个问题~
首先,你遇到的问题核心是误解了PHP中define()函数的参数规则:
PHP的define()函数一次只能定义一个常量,它的标准语法是:
define(string $constant_name, mixed $value, bool $case_insensitive = false): bool
最多接受3个参数:常量名、常量值,以及可选的是否大小写不敏感(默认false)。
你写的define('banana', 'papaya', 'salmon', 'roster', TRUE);完全不符合这个规则——函数根本不知道怎么处理多余的参数,所以不仅不会定义你想要的四个常量,甚至会触发参数数量错误(如果开启了PHP错误提示的话)。
正确的单行合并方法
如果你想把多个常量定义写成单行,有两种靠谱的方式:
直接将多个
define()语句放在一行
这其实就是把你原来的多行代码合并成一行,语法完全合法,效果和多行完全一致:define('banana', TRUE); define('papaya', TRUE); define('salmon', TRUE); define('roster', TRUE);用循环批量定义(更简洁,适合大量常量)
先把要定义的常量名和对应值放到数组里,再通过循环调用define(),这种方式在常量数量多的时候更易维护:foreach (['banana' => TRUE, 'papaya' => TRUE, 'salmon' => TRUE, 'roster' => TRUE] as $name => $val) define($name, $val);(当然展开成多行循环可读性更好,如果你执着于单行的话,上面的写法是可行的)
补充说明
另外要注意:如果你不需要动态定义常量(比如常量名不需要变量生成),也可以用const关键字批量定义,写法更简洁:
const banana = TRUE, papaya = TRUE, salmon = TRUE, roster = TRUE;
这也是单行写法,效果和define()一致(不过const和define()在使用场景上有细微区别,比如const只能在类外部的全局作用域或类内部使用,而define()可以在任何作用域使用)。
内容的提问来源于stack exchange,提问作者Shen
相关产品推荐
相关产品推荐

