最好返回空字符串或空值

时间:2012-08-15 13:06:46

标签: php

如果我写下面的方法(例如),那么它被认为是好的做法:

答:如果文档不存在,则返回空字符串

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 */
}

如果最好返回空值,你能解释一下原因吗?

谢谢!

5 个答案:

答案 0 :(得分:7)

PHP约定

返回布尔值FALSE

OOP approch

抛出异常。此外,您应该使用仅返回布尔值的方法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)

这有两个常用的返回值:falsenull

由于任意原因,PHP的内部功能似乎偏向false,但我个人更喜欢null,因为它更适合代表undefined

附注:测试false(false === $ x)的输入比is_null($x)略多一些:)

但是,在许多情况下,接收此返回值的代码无法对其执行任何有意义的操作;这就是你可以抛出异常来跳过那段代码,就像在Java中一样;它是一种方便的错误处理流量控制机制。

答案 4 :(得分:0)

看到questoin似乎是关于OOP,那么请注意你也可以决定创建一个null object,这个模式上的维基百科页面包含一个"描述",巧合使用目录列表作为一个例子,因为它发生了,男人和女孩......