php7 strict_types - 和标量类型提示 - 停止方法调用者将float转换为int

时间:2017-03-03 12:18:20

标签: php types casting

我的课程是通过作曲家自动加载的。

a.php只会

<?php

$b = new B;
echo $b->add(1.5, 2.5);

b.php

<?php declare(strict_types=1);

class B()
{
    public function add(int $a, int $b):int
    {
        return $a + $b;
    }
}

输出为3。

如果我将declare(strict_types=1);添加到a.php的顶部,那么我会收到错误消息。这意味着PHP会将float转换为整数,除非每个调用B->add()的文件都有declare(strict_types=1);。我不想在任何地方声明strict_types。这可能与a.php的其余部分不相容。

我认为我应该做的是:如果declare(strict_types=1);位于b.php的顶部,那就是这样。然后,只要实例化B类,就会强制执行严格的输入。

有没有办法强制执行此操作?

所以我要强制执行的规则是:在实例化B的地方,add应该只接受一个整数,并且调用者不应该进行任何转换。

如果尝试将float传递给需要整数的方法,任何普通语言都会导致错误。

package main

import "fmt"

func main() {
    fmt.Println(add(1.5, 2.5))
}

func add(a int, b int) int {
    return a + b
}

// Output
main.go:6: constant 1.5 truncated to integer
main.go:6: constant 2.5 truncated to integer

0 个答案:

没有答案