2014-01-19 33 views
0

我想知道,如果一个DateTime继承的类仍然有超类的默认行为函数来比较日期,当我在我自己的专用类的2个实例上使用它时,实现了神奇的__toString()方法?继承DateTime是否更改任何默认函数行为?

我恰恰意味着更容易在代码解释:

class OwnDate extends DateTime 
{ 
public function __toString() 
{ 
return $this->format('Y-m-d H:i:s'); 
} 
} 
$date1 = new OwnDate('2013-12-31'); 
$date2 = new OwnDate('2014-01-01'); 

if ($date1 < $date2) 
{ 
// does this comparsion above work? 
} 

我的意思是,我不知道,什么PHP内部调用,从两个DateTime对象工作获得日期comparsion。通常,在C#中,如果你做这样的事情:

int i = 10; 
Console.WriteLine("i is " + i); 

C#将它解析这个代码:

int i = 10; 
Console.WriteLine("i is " + i.ToString()); 

如果PHP做同样的方式,我上面的comparsion应该不行吧?我试图从PHP类DateTime中找到源代码,但我找不到它。对这个特殊问题的任何帮助都会有所帮助。谢谢!

+0

你试过了吗? –

+0

我没有。我猜想会引发一个奇怪的例外。 – alpham8

回答

1

当您实现/扩展一个类时,父类(在这种情况下为DateTime)会将其方法传递给子类(OwnDate),除非您覆盖它们。因此,DateTime中的方法仍应按照直接使用DateTime类的方式运行。

+0

你是对的。我有勇气在phpfiddle上测试它:http://www.phpfiddle.org/main/code/6af-acg,是的,它按预期工作。日期比较仍然有效。 – alpham8

+0

@ alpham8你不会为了自己尝试和尝试这样的事情而破坏任何东西。阅读手册并为自己尝试是一种学习方式。 – vascowhite

+0

我知道面向对象的编程和所有四个基本原理。但这是一个PHP特殊行为,它以其他方式处理每个oo编程语言。例如,在C#中,DateTime只是一个结构体,因此是一个自定义的数据类型,您可以轻松地进行比较。但是结构在PHP中是未知的,所以它必须是一个整体类。我之前并不确定,PHP内部的句柄如何在对象上进行比较(将返回什么值?引用或任何数据?)。非常感谢您的技术支持。 – alpham8