可捕获的致命错误:类“”的对象无法转换为“”在线“”“

时间:2014-01-19 15:03:26

标签: php class

我有这段代码:

class Date_Time{
private static $month;
private static $year;
private static $day;

public function Date_Time($format){
    return self::getDate($format);
}

public static function getDate($date_format){
    return self::replace_date_string($date_format);
}

public static function replace_date_string($string){
    if(preg_match("/m/", $string)){
        $string = preg_replace("/m/", self::getMonth(), $string);
    }

    if(preg_match("/Y/", $string)){
        $string = preg_replace("/Y/", self::getYear(), $string);
    }

    return $string;
}

public static function getMonth(){
    return date("m");
}

public static function getYear(){
    return date("Y");
}
}

但如果我这样打印:

$date = new Date_Time("Y");
echo $date;

它给我一个错误说:

  

捕获致命错误:第2行的index.php中无法将类Date_Time的对象转换为字符串

我如何解决这个问题,它不会给我一个错误,以及是什么造成了这个错误。

3 个答案:

答案 0 :(得分:3)

添加__toString()方法

public function __toString() {
    return $this->getYear() .'-'. $this->getMonth() .'-'. $this->getDay();
}

尝试打印整个对象时需要使用此方法。

对于PHP4:

public function toString() {
    return $this->getYear() .'-'. $this->getMonth() .'-'. $this->getDay();
}

并手动调用此方法:

$date = new Date_Time("Y");
echo $date->toString();

答案 1 :(得分:2)

您需要实现一个返回字符串表示形式的魔术方法__toString()

答案 2 :(得分:0)

构造函数返回对象而不是值。所以避免从构造函数返回:

$date = new Date_Time();
echo $date::getDate("Y");

使用您当前的代码,您也可以手动调用构造函数,如下所示(但这不是一个好方法):

$date = new Date_Time("Y");
echo $date->Date_TIme("Y");