gpt4 book ai didi

php - 验证构造函数参数,确保参数具有正确的类型

转载 作者:可可西里 更新时间:2023-11-01 13:07:06 25 4
gpt4 key购买 nike

在编写我的第一个 PHP 类时遇到了一个问题,以下是我的 __construct 方法:

public function __construct($foo,$bar) {
$this->foo = $foo;
$this->bar = $bar;
}

$foo$bar 都是必需的,没有它们,这些方法将无法工作。当对象像这样实例化时没有定义它们是可以的:

$var = new Class();

因为这会引发异常(例如,类需要 2 个参数,没有设置)。但是如果它们被设置但不是像这样的正确类型:

$var = new Class('33','ddd');

我的方法将失败,因为变量类型错误。

我应该在哪里验证这些?在构造函数中还是在每个方法中?

我现在使用的解决方案有效,但我不确定它是否是正确的方法:

// $foo needs to be a string with letters only
// $bar needs to be an integer
public function __construct($foo,$bar) {
$this->foo = $foo;
$this->bar = $bar;
if(!is_numeric($bar)){
// Throw exception
}
elseif(other validation case)
etc...
}

OO 编程的概念对我来说很新,因此非常感谢您提供任何引用资料的链接。

最佳答案

我可能会做这样的事情来防止 ctor 内部困惑并允许类在内部设置它们的值:

class MyClass …

protected $_foo;

/**
* @param String $foo String with letters only
* @param Integer $bar Any Integer
* @return void
* @throws InvalidArgumentException when $foo is not letters only
* @throws InvalidArgumentException when $bar is not an Integer
*/
public function __construct($foo, $bar)
{
$this->_setFoo($foo);
$this->_setBar($bar)
}

/**
* @param String $foo String with letters only
* @return void
* @throws InvalidArgumentException when String is not letters only
*/
protected function _setFoo($foo)
{
if (FALSE === $this->_consistsOfLettersOnly($foo)) {
throw new InvalidArgumentException(
'$foo should consists of letters only'
);
}
$this->_foo = $foo;
}


这有一个额外的好处,如果您以后需要公开公开 setter,您只需更改可见性关键字。

将验证放入它自己的方法中并不是绝对必要的,但我认为它使代码更具可读性。如果您发现该类中的另一个属性需要相同的验证,您也可以更轻松地重用它。

关于php - 验证构造函数参数,确保参数具有正确的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4604910/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com