时间和次数我遇到了这个问题:
您有一个日期(日期时间)$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原则并且看起来太习惯了。
有更好的方法吗?这是常见的问题所以它应该良好的解决方案。
答案 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;
}