我有一些像这样的代码:
class Repository
{
private $number;
function __construct(int $number)
{
$this->number = $number;
}
//example where $number is required
function readQuote()
{
return $this->db->runSql("select * from quote where id = $this->number");
}
}
我将$number
放在构造函数中,因为Repository
引用具有特定数字的Quote
对象,而Quote
在没有数字的情况下不能存在。因此,当Quote
数字已知时,强制数字存在是有意义的。
然而......有一种情况是这个数字还不知道。就像我第一次加载页面并且没有定义(拾取/选择)我想要显示的数字,但我希望页面加载和工作。
具体来说,我有这样的代码:
$controller = new Controller(new Repository($number));
//this line does not require Repository,
//and hence $number can be uninitialized
$controller->generateIndexPage();
...
//this one does, but it is called only when number is already known
$controller->getQuote();
当我知道这个数字时,一切运作良好。当它尚未初始化且为null
时,我的代码中断了PHP TypeError
错误(PHP引擎预期int
,它得到null)
。
问题
我该如何处理这种情况?
思想
我能想到的两个解决方案是
-1
,这将使PHP保持高兴,但这也是一个神奇的价值,因此我认为这是不可取的function __construct(int $number = null)
,这将取消TypeError
,但它在某种程度上让我感到烦恼,因为我正在弱化构造函数以接受null
,而不是让它变硬仅接受int
。答案 0 :(得分:0)
为变量赋一个函数参数值,如下所示:
class Repository{
private $number;
function __construct($number = 'x'){
// Check if the $number is provided and value of $number has changed.
if(is_numeric($number) && $number != 'x'){numeric
$this->number = $number;
}
}
}
答案 1 :(得分:0)
对Alex对我的问题的评论表示赞同,我正在考虑采用这种方法:
使Controller
接受Repository
或null
的位置,因为存储库不是我的控制器的必需参数。但请$number
强制Repository
。