为什么80%的码农都做不了架构师?>>>   

之前吐槽过PHP为什么没__compare魔术方法《PHP __compare?》,可能开发组觉得没有必要吧,毕竟对象默认的比较一般情况已经够用了。 于是乎怀着no zuo no die心情尝试去实现一下,发现难度比预想要小。但由于拖延症的原因这篇文拖到现在才写,还有一方面就是修改的地方比较多和杂乱。

先看看效果吧!

<?php
//默认情况
class Foo
{private $v = [];public function __construct(array $v) {$this->v = $v;}
}$o1 = new Foo([1, 2, 3]);
$o2 = new Foo([2, 1, 4]);
var_dump($o1 > $o2);
/* output */
bool(false)//添加 __compare
class Foo
{private $v = [];public function __construct(array $v) {$this->v = $v;}public function __compare($o) {return $this->v[1] > $o->v[1];}
}$o1 = new Foo([1, 2, 3]);
$o2 = new Foo([2, 1, 4]);
var_dump($o1 > $o2);
/* output */
bool(true)

可以看出,$o1, $o2的比较行为已经被__compare改变

先看对象比较的实现吧,这里假设我们是有__compare这个魔术方法的。当两个对象进行比较时会调用zend_std_compare_objects这个函数,然后让函数检测对象是否注册了__compare,如果有就优先调用,很简单吧。

再下面的就懒得贴过来了,直接贴我博客地址

http://solupro.org/PHP__compare_maigc_method/

转载于:https://my.oschina.net/s01u/blog/264777

PHP __compare 魔术方法的实现相关推荐

  1. DataList中的按钮触发事件的方法的实现

    DataList中的按钮触发事件的方法的实现 1.要在CommandName中设定名字如:       <asp:Button id="Button1" runat=&quo ...

  2. python运行mcmc为何老出错_python中mcmc方法的实现

    MCMC方法在贝叶斯统计中运用很多,MIT发布的EMCEE是实现的比较好的.介绍页面在下面.源代码中examples里的代码可以帮助理解各种功能,特别是line.py 列出了最小二乘法,最大似然法和M ...

  3. Java黑皮书课后题第10章:**10.23(实现String类)在Java库中提供了String类,给出你自己对下面方法的实现(将新类命名为MyString2)

    **10.23(实现String类)在Java库中提供了String类,给出你自己对下面方法的实现(将新类命名为MyString2) 题目 简短的吐槽 代码:这里将类名改用Test23_MyStrin ...

  4. JavaScript中子类调用父类方法的实现

    一.前言 最近在项目中,前端框架使用JavaScript面向对象编程,遇到了诸多问题,其中最典型的问题就是子类调用父类(super class)同名方法,也就是如C#中子类中调用父类函数base.** ...

  5. 一文介绍备机重建各种方法的实现机制

    摘要:本文将介绍备机重建各种方法的实现机制,并结合应用场景分析,以及对新增参数的使用建议,以期获得最佳应用效果. 本文分享自华为云社区<先码再看,一文介绍备机重建各种方法的实现机制>,原文 ...

  6. 链式调用方法的实现原理和方法

    1.什么是链式调用? Person person = new Person().setName(fog).setAge(18).setSex(man).setJob(software engineer ...

  7. jQuery 中 data 方法的实现原理

    jQuery 中 data 方法的实现原理 前言:jQuery 作为前端使用最多最广泛的 JS 库,其源码每个 JSer 都应该研究一下.早就打算看却一直被各种事拖着,上次某公司面试时被问到 jQue ...

  8. python回调类_python 回调函数和回调方法的实现分析

    回调与事件驱动 回调函数有比较重要的意义:它在是事件驱动的体现 我们试想一个场景,如果我们触发了某个事件,比如点击事件 那么只要给这个点击事件绑定一个或多个处理事件,也就是回调函数 我们就可以在点击事 ...

  9. UG二次开发装配篇 添加/拖动/删除组件方法的实现

    我们在UG装配的过程中,经常会遇到需要调整组件目录位置,在软件设计过程中可以通过在目录树里面拖动组件来完成. 那么,如果要用程序实现组件的移动/拖动,我们要怎么做呢? 本节就完成了添加/拖动/删除组件 ...

最新文章

  1. TIOBE 1 月编程语言:Python 摘得 2020 年度编程语言!
  2. Luogu 1541 乌龟棋
  3. ML之RFDT:利用RF(RFR)、DT(DTR)两种算法实现对boston(波士顿房价)数据集进行训练并预测
  4. java中如何限制输入非空_项目中的参数限制、非空、以及集合中的验证,你真的会做吗(Java)...
  5. [转载] Python中的switch语句的替代品
  6. Java txt转xml中文乱码_JAVA dom4j实现String字符串转换成XML文件(解决中文乱码问题)...
  7. mac编写python_刚到手Mac写Python的一个简单问题
  8. 190418每日一句
  9. 数据库课程设计实验报告--图书馆管理系统
  10. 2022-2028年全球与中国汽车齿轮齿条转向系统产业市场前瞻与投资战略规划分析报告
  11. Flask 框架 网页跳转详解。
  12. java计算机毕业设计学生用品采购系统源码+数据库+系统+lw文档+部署
  13. eth0: no IPv6 routers present
  14. 二进制优化(数独问题+有向图问题)
  15. Semantic SLAM with Autonomous Object-Level Data Association 论文笔记
  16. 文章《Deep Image Homography Estimation》
  17. 倚天屠龙记(函数模板)
  18. IIS设置目录浏览增加IP访问限制(图文)
  19. 手机浏览器下载的m3u8格式的多个视频文件合并成一个视频(Java实现)
  20. sunday算法c语言实现,字符串搜索的Sunday算法

热门文章

  1. excel不能插入activex控件_办公小技巧:制作更炫酷的Excel下拉菜单
  2. mysql 列选项_列未显示在“列”选项卡中(MySQL Workbench)
  3. 第14章:信息文档与配置管理和知识与流程管理
  4. springmvc返回数据中文乱码
  5. SpringContextUtil
  6. Python 应用 uWSGI + Nginx 部署
  7. php empty,isset,is_null比较
  8. CentOS中部署jar包时提示:org.quartz.SchedulerException: Couldn‘t get host name
  9. Electron中实现通过webview实现内嵌网页并嵌入css样式和js脚本等
  10. ZedGraph怎样在双击图形后添加箭头标记