【发布时间】:2023-03-20 11:36:01
【问题描述】:
拥有这样的属性是一种好习惯吗:
/**
* @var false|array|null
*/
protected $mockMethods = false;
此属性可以是false 或array 或null。
或者对于内部类属性只有一种数据类型更好?
【问题讨论】:
标签: php coding-style phpunit
拥有这样的属性是一种好习惯吗:
/**
* @var false|array|null
*/
protected $mockMethods = false;
此属性可以是false 或array 或null。
或者对于内部类属性只有一种数据类型更好?
【问题讨论】:
标签: php coding-style phpunit
作为一般规则,我会说“不”。主要是因为您最终可能会针对代码中的变量类型添加额外的类型检查。也就是说:我已经看到它做了很多次,包括在 PHP 内置函数的返回值中。所以我不能真的声称它是“禁区”或任何东西!
【讨论】:
有很多函数(包括内置函数)可以返回字符串或数组,false 或 null。
在这些情况下,原因是该函数的主要目的是返回一个字符串或数组。如果操作不适用,通常会返回 false - 例如,如果您在不包含您要查找的子字符串的字符串上调用 strpos() - 而如果某处发生错误,则会专门返回 null .
但您的问题是关于变量,更准确地说是属性。虽然用于恢复函数返回的变量可以根据情况返回三种不同类型,但可以为这些类型中的任何一种分配,存储不确定的信息是不明智的。
当一个值来自一个可以返回多种不同类型的函数时,您必须在使用它之前对其进行测试。您越早对其进行测试并断言其性质,您就能越早采取相应的行动。
如果您只是将该返回分配给您的属性并在使用它时测试它的类型,这意味着您必须在每次需要它时对其进行测试。
此外,如果发生错误,您将无用的null 存储在属性中,并且仅在需要该值时才检测错误。
制作程序的一个好方法是根据它们将包含的内容以及将要对它执行的操作来设计您的变量。它使您的代码更加明显,并且可以帮助您防止错误。
在存储函数返回的值之前检查它们的类型,最终检查它们的内容,这样你就可以站在你存储的值上。
为了与现实生活相提并论,将值从函数分配给属性而不检查和过滤它们就像在他们与您联系后立即雇用人员并仅在 - 因此每次 - 您需要放置他们执行一项任务。不用说它乏味、杂乱且容易出错。
【讨论】: