【发布时间】:2021-10-21 05:36:33
【问题描述】:
我正在开发一个 PHP 项目并维护一个已有十年历史的应用程序。 在这个项目中,没有人使用过类型声明,但对我来说这似乎是一种很好的做法,我尝试(尽可能频繁地)编写干净的代码。 作为初级开发人员,当你的经理不关心良好实践时,这并不容易^^。
我正在编写一个应该返回一个对象的函数。
/**
* Returns a coefficient object depending on the pack size given as an argument
* @param int|null $pack_size
* @return object
*/
function coefficient(int $pack_size = null) : object
{
if (est_id($this->id))
{
// Checking that $pack_size is a number
if (preg_match('`^[0-9]+(\.[0-9]+)?$`', $pack_size))
{
if (is_object($this->coefficient_group))
$coefficient_resultSQL = coefficient::list(['group' => $this->coefficient_group->id(), 'size' => $pack_size]);
if (!empty($coefficient_resultSQL->result))
{
$coefficient_src = reset($coefficient_resultSQL->result);
$coefficient = new coefficient(null, ['element' => $coefficient_src]);
if (!empty($coefficient) && est_id($coefficient->id()))
$result = $coefficient;
}
}
}
return (!empty($result)) ? $result : null;
}
问题是,通过将返回类型声明为对象,如果出现错误,我无法返回“null”。 那么,如果我想返回一个显式的错误值该怎么办呢? 非常感谢您的帮助!
【问题讨论】:
-
虽然尝试遵循良好的实践很好,但如果不对代码库进行全面重构,您最终会使软件更难维护。在处理遗留代码时坚持已定义的实践是一个好主意。无论好坏。
-
这在某种程度上确实是见仁见智。很多人会说你应该抛出一个异常,而不是诉诸于使用特定的值来表示错误条件。但话又说回来,如果您的应用程序遵循类似于上面显示的
null返回的一致方法,那么在代码可维护性等方面破坏它可能不是一个好主意。“良好实践”也是一个见仁见智的问题。类型检查可能很有用,但 PHP 又被设计为松散类型,有时这很有用。 -
什么版本的 PHP?
-
我们目前使用的是 PHP 7.3
-
我想知道调用者会如何处理这个空值,除了将错误传播到调用链的下一级。无效结果至少有 4 个可能的原因。如果你问我,最好在此处调用一个紧急函数并强制调用者更正他们的代码,而不是默默地产生一个不可用的值。