getDate函数OOP困境

时间:2014-01-09 09:23:31

标签: php datetime

时间和次数我遇到了这个问题:

您有一个日期(日期时间)$object->date的对象,以多种格式呈现 在前端...在某些情况下可以为空

所以我通常采用的方法是在模型中:

public function getDate(){
    if($this->date){
        return DateTime($this->date);
    }
    return null;
}

并像$object->getDate()->format('d-m-Y')一样使用它; 这很酷......但如上所述,可能会有一些空日期的对象,
以上调用将导致“...format() on a non object...”例外。

解决这个问题的方法是始终检查是否为空:
 $object->getDate() ? $object->getDate()->format('d-m-Y') : "";

每次需要约会时,这都太长而且难看。

所以我的最终解决方案是在方法中整合检查:

public function getDate($format = false, $empty_str = ""){
    if($format){
        if($this->date){
            $dt = new DateTime($this->date);
            return $dt->format($format);
        }
        return $empty_str;    
    }else{
        return new DateTime($this->date);
    }
}

编辑:几年后审核我的代码我想出了更好的格式化:

public function getDate($format = false, $empty_str = ""){ 
    if (!$this->date) {
        return $empty_str;
    }

    $dt = new DateTime($this->date);
    return ($format) ? $dt->format($format) : $dt;
}

用法很酷:

$object->getDate('d-m-Y');
$object->getDate('d-m-Y', 'no date');
$object->getDate(); // DateTime object

我唯一担心的是......该方法会破坏几个OOP原则并且看起来太习惯了。

有更好的方法吗?这是常见的问题所以它应该良好的解决方案。

2 个答案:

答案 0 :(得分:2)

您可以编写一个特定的类,如

class NullObject {

    public function __get($var) {
        return null;
    }

    public function __call($funcname, $params) {
        return null;
    }

}

而不是简单地返回null你做

return new NullObject();

答案 1 :(得分:1)

public function getDate($format = "default format", $empty_str = ""){

    if($this->date){
        $dt = new DateTime($this->date);
        return $dt->format($format);
    }
    return $empty_str;  
}