在隐式转换之前如何获取参数的原始数据类型

问题描述 投票:0回答:1

PHP类型声明带有强制模式作为默认模式,因此可以更改声明的类型,并且仅当PHP可以将错误类型的值强制转换为期望的值时,才抛出TypeError

现在,我们有一个仅接受整数作为参数的函数,因此,当用户传递浮点数时,它将隐式转换为整数类型。是否可以从此函数中检测到用户输入了float而不忽略声明的数据类型?

function doSomething(int $number) {
    var_dump($number); //  want something like int(5), user intered float(5.5)
}

doSomething(5.5) 

编辑

想到一个可能的解决方案是

function doSomething(int $number) {
    var_dump($GLOBALS['num']);
}

$num = 5.5;
doSomething($num)

但是我不喜欢它

php type-declaration
1个回答
0
投票

如果从声明中删除int,则可以使用gettype检查输入的类型,然后根据需要手动强制转换。例如:

gettype

输出:

function doSomething($number) {
    var_dump($number); //  want something like int(5), user intered float(5.5)
    if (gettype($number) !== 'integer') {
        $number = (int)$number;
        var_dump($number);
    }
}

doSomething(5);
doSomething(5.5);
© www.soinside.com 2019 - 2024. All rights reserved.