※ 引述《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 的话,请不要在条件判断中放奇怪的东西