常见的隐式转换

  重要提醒:隐式转换虽然能简化代码,但也会导致程序出现不可预料的结果甚至发生错误,所以应该尽量避免出现隐式转换,该显示转换就显示转换,以保证代码的正确性和可读性。



<?php
// 报告所有错误
ini_set('display_errors', 'On');
error_reporting(-1);

$arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

$index = 5 / 2;

echo $index; // 2.5

echo PHP_EOL;

// Deprecated: Implicit conversion from float 2.5 to int loses precision
echo $arr[$index]; // 2

//========== 总结 ==========//
// 1、数组的key为int类型,操作数组元素时使用浮点数作为key就会发生隐式转换且报Deprecated错误(如上面的浮点数2.5转为int类型)。



<?php
// 报告所有错误
ini_set('display_errors', 'On');
error_reporting(-1);

function foo(bool $var): void
{
    echo var_export($var, true) . PHP_EOL;
}

// 实参和形参的数据类型一致的情况
foo(true);  // true
foo(false); // false

// 实参和形参的数据类型不一致的情况(可以清楚地看到,实参被转成了形参声明的数据类型)
foo(0);        // false
foo(9527);     // true
foo('');       // false
foo('草泥马'); // true

//========== 总结 ==========//
// 1、如果形参声明了数据类型,但实参的数据类型与形参声明的不一致,就会发生类型转换(转为形参声明的数据类型)。
// 2、发生类型转换仅限在不开启严格模式“declare(strict_types=1)”情况下,如果开启了严格模式就会报“Fatal error: Uncaught TypeError”。

Copyright © 2024 码农人生. All Rights Reserved