作者JohnRoyer (日落 Zero)
看板PHP
标题Re: [闲聊] 从PHP7升级到PHP8後 解决count()的错误
时间Mon Jul 1 17:41:17 2024
※ 引述《nightwind209 (夜风)》之铭言:
: 第二种:加上is_countable()
: 改为if (is_countable($new_TimestampTitle) && count($new_TimestampTitle) > 0) {
is_countable() 函式,会辨别收到的变数是哪一种资料型态
如果资料型态可以使用 count() 则回传 true
如果资料型态无法被 count() 使用则回传 false
单纯在 count() 之前,做一次资料型态检查而已
再来看一下这二个条件被放在 if() 中会发生的事情
语法很长,这边先来整理、缩短一下
条件 A:is_countable($new_TimestampTitle)
条件 B:count($new_TimestampTitle)
ChatGPT 给的范例整理後为:if (A && B)
要让 if 中的条件为 true,则 A 必须为 true 且 B 也必须为 true
若 A 或是 B 其中一个为 false,则 if() 必定会得到 false
这边要提到一个常见程式语言的特性叫做「short circuit」
(不建议翻译成中文,文意应该会不同)
意思是会自动判断是否需要执行所有给定的条件判断
上述范例为 && (AND) ,必须 A 和 B 二个条件都是 true 结果才会是 true
若遇到一个不可数的资料型态导致 A 条件为 false
PHP 知道在 A 为 false 的型况中,B 不管是 true 还是 false,AND 的结果都是 false
所以 B 的判断式会自动忽略不执行
相反的,若多个条件使用 || (OR) 合在一起判断,只要第一个条件为 true 结果
就一定为 true,因此第一个条件确定是 true 以後,後面的条件式就都不执行了
以下写个简单的范例
$x = 0;
if (true && ($x += 10) { }
echo $x; // x => 10
$x = 0;
if (false && ($x += 10) { }
echo $x; // x => 0
// 这边换成使用 OR
$x = 0;
if (true || ($x += 10)) { }
echo $x; // x => 0
$x = 0;
if (false || ($x += 10)) { }
echo $x; // x => 10
备注:因为要让大家能快速了解 short curcuit 才会在判断中加上运算,是不好的写法
如果你希望以後还有同事一起写 code 的话,请不要在条件判断中放奇怪的东西
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 59.127.133.56 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/PHP/M.1719826881.A.39D.html
1F:推 nightwind209: 感谢您详细的说明 chatgpt的方法 我就在想$new_Time 07/02 00:13
2F:→ nightwind209: stampTitle原本就不像是countable或array 那就永远 07/02 00:14
3F:→ nightwind209: 是false 那加上&&不就永远都false 但我只有理解到这 07/02 00:15
4F:→ nightwind209: 原来A是false後 B就会被忽略不执行 07/02 00:16
5F:推 wintersxp: 翻成中文就短路,读过电学就能体会 08/09 23:12