是否可以使用false,array或null属性

时间:2017-09-01 10:26:36

标签: php coding-style phpunit

拥有这样的属性是不错的做法:

/**
 * @var false|array|null
 */
protected $mockMethods = false;

此属性可以是falsearraynull

或者最好只为内部类属性提供一种数据类型?

2 个答案:

答案 0 :(得分:2)

作为一般规则,我会说“不”。主要是因为您可能最终会在代码中针对变量类型添加其他类型检查。那就是说:我已经看过很多次了,包括在PHP函数中建立的返回值。所以我不能真正宣称它是“禁区”或任何东西!

答案 1 :(得分:2)

有许多函数 - 包括内置函数 - 返回字符串或数组,falsenull

在这些情况下,原因是函数的主要目的是返回一个字符串或数组。如果操作不适用,通常会返回false - 例如,如果您在不包含您要查找的子字符串的字符串上调用strpos(),则null将具体显示如果某处发生错误,则返回。

但你的问题是关于变量,属性更精确。虽然用于恢复可以根据具体情况返回三种不同类型的函数的返回的变量可以分配任何这些类型,存储该不确定信息是不明智的

当一个值来自可以返回多个不同类型的函数时,您必须在使用它之前对其进行测试。你越早测试并断言其性质,你就能越早采取行动。

如果您只是将该返回分配给您的属性并在使用它时测试其类型,则意味着您必须在每次需要时对其进行测试。 此外,如果发生错误,您将在属性中存储无用的null,并仅在需要该值时检测错误。

制作程序的一个好方法是根据变量包含的内容以及将对其执行的操作来设计变量。它使您的代码更加明显,并可以帮助您防止错误。

在存储之前检查函数返回的类型和最终值,以便您可以保留存储的值。

为了与现实生活平行,将函数中的值分配给属性而不检查和过滤它们就像是在他们联系您时立即雇用人员,并且只有在 - 并且因此每次 - 您需要放置时才会对他们进行面试他们在一项任务上。不用说它繁琐,凌乱,容易出错。