You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何echo未输出文本前半部分且仅输出-1?技术咨询

关于echo输出异常的问题解答

咱们先拆解你遇到的核心问题,其实两个疑问本质是同一个原因——PHP运算符优先级的坑,我给你一步步捋清楚:

为什么执行echo "2 results of this " . "Apples" <=> "bananas";只输出-1?

首先你要明确:在PHP里运算符是有执行优先级的,太空船运算符(<=>)的优先级比字符串连接符(.)高。这意味着你的代码不会按照你预期的“先拼接字符串再输出”执行,而是会先处理比较操作,再处理字符串连接。

具体执行步骤是:

  1. 先运行"Apples" <=> "bananas":按字典序比较字符串,大写字母A的ASCII码比小写b小,所以这个比较返回结果-1。
  2. 然后把前面的字符串"2 results of this "和-1拼接,得到"2 results of this -1"。
  3. 最后echo这个拼接后的字符串,正常来说应该输出完整内容。

但你说只输出了-1,大概率是你代码的实际写法和描述有差异——比如不小心加了括号,写成了:

echo ("2 results of this " . "Apples") <=> "bananas";

这时候PHP会先拼接出完整字符串"2 results of this Apples",再和"bananas"比较,结果还是-1,而echo的是这个比较结果,自然就看不到前面的文本了——因为它只是比较的输入,不是输出内容。

为什么echo无法输出文本的前半部分?

这个问题就是上面优先级问题的延伸:你预期的执行顺序(先拼接再输出)和PHP实际的执行顺序(先比较再拼接/直接比较)不匹配,导致前半部分文本要么被当成了比较的一部分,要么和比较结果拼接后被你误以为“消失”了,本质是对运算符优先级的理解偏差。

怎么解决?

如果你想输出拼接后的完整文本,直接去掉比较部分即可:

echo "2 results of this " . "Apples";
// 输出:2 results of this Apples

如果想同时输出文本和比较结果,用括号明确执行顺序,或者拆分代码更清晰:

// 方式1:用括号明确优先级
echo "2 results of this Apples <=> bananas: " . ("Apples" <=> "bananas");

// 方式2:拆分代码更易读
$combinedStr = "2 results of this " . "Apples";
$comparisonResult = $combinedStr <=> "bananas";
echo "$combinedStr <=> bananas: $comparisonResult";

两种方式都会输出:2 results of this Apples <=> bananas: -1

内容的提问来源于stack exchange,提问作者Harry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:35:47