在 class setter 中使用强制转换和类型验证有什么区别?

What is the difference between the use of casting in a class setter and type verification?

我遇到了多种完成 setter 的方法,但我还没有在大型项目中使用它们...

我想知道这两个 setter 有什么区别,哪个最好?

public function setId($id){
    if(is_int($id) && $id > 0){
        $this->_id = $id;
        return true;
    }

    return false;
}

或者

public function setId($id){
$id = (int) $id;
    if($id > 0){
        $this->_id = $id;
        return true;
    }

    trigger_error("The id of your object could not be set/assigned !);
}

trigger_error() 函数有什么用,当代码无处不在时,setter 函数中的哪一个有用

注意:我正在使用 hydrate() 函数用数据库中的数据填充我的对象!

如果您使用的是 PHP 7,您可以使用恕我直言更好的版本

public function setId( int $id ){
    if($id > 0){
        $this->_id = $id;
        return true;
    }

    return false;
}

这意味着如果值不是 int

,PHP 本身会抛出一个错误

仍然需要检查值是否大于0的条件,只要这个条件通过,那么函数就会return true,我假设一个值小于0是无效值,这将 return false.

在您的第二个示例中,trigger_error() 用于记录或引发错误,表明已向该方法传递了无效值,因此需要在某处进行处理。

使用上面的代码版本,您还可以键入提示 return 值...

public function setId( int $id ): boolean {
    if($id > 0){
        $this->_id = $id;
        return true;
    }

    return false;
}

如果您需要坚持原来的选项,那么在我看来,第一个选项更好,第二个选项执行强制转换为 int 然后检查结果是否为 int,所以这没有用。