如果我写下面的方法(例如),那么它被认为是好的做法:
答:如果文档不存在,则返回空字符串
B:返回空值?
完成了大量的Java,并且Java中的方法需要返回类型我认为最好的做法是返回一致的类型,这在PHP中也是如此,或者返回空值更好代替?
DocumentClass
{
public function getDir($documentId)
{
/* Code to get location of document */
return (file_exists($document) ? $document : '');
}
}
if (!empty($documentClass->getDir(5))
{
/* Do this */
}
如果最好返回空值,你能解释一下原因吗?
谢谢!
答案 0 :(得分:7)
返回布尔值FALSE
。
抛出异常。此外,您应该使用仅返回布尔值的方法dir_exitsts
(或您喜欢的任何其他名称)(true为false)。并在致电getDir
对此没有具体规则。它完全取决于你。
我按照 PHP方式返回false
。
答案 1 :(得分:2)
你会对这个返回值做什么?这是否应该发出逻辑错误,非法输入 - 或者只是一些边缘情况?
在两个'错误'的情况下,我坚持使用异常而不是一些边缘返回值 - 特别是因为PHP是弱类型语言,并且在某些(愚蠢地)编写的{{}中混合NULL和''太简单了1}}表达。
对于边缘情况,我可能会坚持使用==
作为返回值。在我看来,这是一个有点破碎的方法(查看truly maddening example的这个链接),但至少它是PHP中常见的习语。
答案 2 :(得分:1)
file_exists
将 FALSE 返回给不存在的文件。
所以你可以用这种方式改变你的状况
if (false ! == $documentClass->getDir(5))
{
/* Do this */
}
替代方案: is_readable
如果filename指定的文件或目录存在且可读,则返回 TRUE ,否则返回FALSE。
答案 3 :(得分:1)
这有两个常用的返回值:false
或null
由于任意原因,PHP的内部功能似乎偏向false
,但我个人更喜欢null
,因为它更适合代表undefined
。
附注:测试false(false
=== $ x)的输入比is_null($x)
略多一些:)
但是,在许多情况下,接收此返回值的代码无法对其执行任何有意义的操作;这就是你可以抛出异常来跳过那段代码,就像在Java中一样;它是一种方便的错误处理流量控制机制。
答案 4 :(得分:0)
看到questoin似乎是关于OOP,那么请注意你也可以决定创建一个null object,这个模式上的维基百科页面包含一个"描述",巧合使用目录列表作为一个例子,因为它发生了,男人和女孩......