<?php declare(strict_types=1); ini_set('display_errors', 'On'); error_reporting(-1); /** * 打印变量的相关信息 * * @param mixed $value 要打印的表达式 * @param mixed ...$values 更多要打印的表达式 * @return void echo */ function v(mixed $value, mixed ...$values): void { ob_start(); // 打开输出控制缓冲 var_dump($value); echo ob_get_clean(); // 从缓冲区获取var_dump()的内容,然后清空缓冲区 foreach ($values as $v) { v($v); // 递归 } } $array1 = ['num1' => 1, 'num2' => 0, 'num3' => 2, 'num4' => 4]; $array2 = ['num1' => 1, 'num2' => 0, 'num3' => 2, 'num4' => 4]; v($array1 === $array2); // bool(true) unset($array1, $array2); $array1 = ['num1' => 1, 'num2' => 0, 'num3' => 2, 'num4' => 4]; $array2 = ['num2' => 0, 'num1' => 1, 'num3' => 2, 'num4' => 4]; v($array1 === $array2); // bool(false) unset($array1, $array2); // 说明:虽然两个数组包含的键值对是一样的,但由于元素顺序不同,所以也不相等。 //========== 总结 ==========// // 1、使用===对两个数组进行判等时,两者的键值对必须完全一致(包括元素顺序)才算相等。 // 如果想忽略元素顺序的影响,可以按键名排序后再进行判等。
<?php declare(strict_types=1); ini_set('display_errors', 'On'); error_reporting(-1); /** * 打印变量的相关信息 * * @param mixed $value 要打印的表达式 * @param mixed ...$values 更多要打印的表达式 * @return void echo */ function v(mixed $value, mixed ...$values): void { ob_start(); // 打开输出控制缓冲 var_dump($value); echo ob_get_clean(); // 从缓冲区获取var_dump()的内容,然后清空缓冲区 foreach ($values as $v) { v($v); // 递归 } } /** * Human */ class Human { protected string $name; protected string $gender; protected int $birth; public function __construct(string $name, string $gender, int $birth) { $this->name = $name; $this->gender = $gender; $this->birth = $birth; } } $human1 = new Human('张三', '男', 2003); $human2 = new Human('张三', '男', 2003); v($human1 === $human2); // bool(false) $human3 = clone $human1; v($human1 === $human3); // bool(false) $human4 = &$human1; v($human1 === $human4); // bool(true) //========== 总结 ==========// // 1、两个对象之间判等比较的是地址,而不是值,所以即便是克隆对象和母体对象也是不相等的,因为克隆的本质是创建了一个新对象, // 只是克隆对象的属性值设置成了和母体对象一样而已。
Copyright © 2024 码农人生. All Rights Reserved