在类设置器中使用转换和类型验证之间有什么区别?

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

我遇到了多种方法来完成一个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 oop casting getter-setter setter
1个回答
1
投票

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

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

    return false;
}

这意味着如果值不是int,则PHP本身会抛出错误

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

在第二个示例中,trigger_error()用于记录或引发错误,该错误指示方法已传递无效值,因此需要处理此处。

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

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

    return false;
}

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

© www.soinside.com 2019 - 2024. All rights reserved.