在看《PHP之道》时有这么一段代码
$start < $end
引起了我的注意,印象中并没有__compare
之类的魔术方法,翻了下手册确实没找到,也没相关实现,那为什么这里可以直接比较呢?因为这是built-in class,所以需要翻一下源码。(已下代码版本是 5.4.27)
以compare
为关键字在ext/date/php_date.c
(DateTime在这实现)搜索,得到这么一个函数
可以看出这就是__compare
的实现部分,通过函数名继续搜索,来到line:1950
date_object_handlers_date
是一个 zend_object_handlers
,结构是这样的
所以只有实现zend_object_handlers.compare_objects
才具备直接比较的功能,但这并没有暴露给用户层。
####相关资料:
2014-05-08 update 已实现添加__compare
魔术方法,整理以后近期写篇博客记录一下