PHP 利用闭包偷窥马对人类的想法

 1 <?php
 2
 3 /**
 4  * reference:http://www.php.net/manual/en/reflectionmethod.getclosure.php
 5  * Learn this and you will know How to peer through what a horse is thinking!
 6  *
 7  * Class Client
 8  */
 9 class People
10 {
11     private $heartWords = "How beautiful the horse is!I want to ride it!";
12
13     public function hook()
14     {
15         $who = get_class($this);
16         echo  ucfirst($who). " says :".$this->heartWords. "\n";
17     }
18
19     public function peer()
20     {
21         return function(){
22             $this->hook();
23         };
24     }
25 }
26
27 class Horse
28 {
29     private $heartWords = "How silly the guy is! A big ass!";
30 }
31
32 $people = new People();
33 $horse  = new Horse();
34
35 try{
36     $reflection = new ReflectionClass(get_class($people));
37 }
38 catch(ReflectionException $e)
39 {
40     echo $e->getMessage() ."\n";
41     return;
42 }
43
44 $closure = $reflection->getMethod(‘hook‘)->getClosure($people);
45 $truth = $closure->bindTo($horse,$horse);
46
47 $truth();     //  Horse says :How silly the guy is! A big ass!

注:本人郑重声明,此比喻只为加深对该例子的理解,无诋毁人类之意。

时间: 2024-10-13 00:00:57

PHP 利用闭包偷窥马对人类的想法的相关文章

JavaScript利用闭包解决循环绑定事件

例子: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> </head> <body> <button></button> <button></button> <button></button> </body> <script type="text/javasc

sizzle.js学习笔记利用闭包模拟实现数据结构:字典(Map)

sizzle.js学习笔记利用闭包模拟实现数据结构:字典(Map) 这几天学习和查看了jQuery和Property这两个很流行的前端库的御用选择器组件Sizzle.js的源代码,收获还是相对多的!之前一直做使用Java语言开发,其丰富的组件类库使得开发效率那叫一个快呀!突然转来做JavaScript一时间还有点儿不适应(快半年了),不过自从看见那么多漂亮的网站和对JavaScript接触的越来越多,也发现了其中的一些乐趣.正如自己一直坚信的那样,编程语言仅仅是工具,重要的是编程思想!使用Jav

js利用闭包封装自定义模块的几种方法

1.自定义模块: 具有特定功能的js文件 将所有的数据和功能都封装在一个函数的内部 只向外暴露一个包含有n个方法的对象或者函数 模块使用者只需要通过模块暴露的对象调用方法来实现相对应的功能 1.利用函数方法自调用 /** * Created by lonecloud on 2017/9/10. */ (function (window) { var DEBUG="debug" /** * 打印日志 * @param args */ function log(args) { consol

利用闭包向post回调函数传参数

最近在闲逛XX站的时候,打算搞个破坏,试试有多少人还是用初始密码登陆.比较懒,所以直接打开控制台来写. 所以问题可以描述为: 向后端不断的post数据,id从1~5000自增,后端会根据情况来返回值res,需要把res=100的id输出. 最简单的想法是:for循环内部调用post数据 //错误示范 一 for(var i = 92000;i<92500;i++){ //直接借用一下网站内引用的jq $.post("login.php", { ts:"login&quo

[js]利用闭包向post回调函数传参数

最近在闲逛校园XX站的时候,打算搞个破坏,试试有多少人还是用初始密码登陆.比较懒,所以直接打开控制台来写. 所以问题可以描述为: 向后端不断的post数据,id从1~5000自增,后端会根据情况来返回值res,需要把res=100的id输出. 最简单的想法是:for循环内部调用post数据 //错误示范 一 for(var i = 92000;i<92500;i++){ //直接借用一下网站内引用的jq $.post("login.php", { ts:"login&q

利用闭包解决for循环里onclick事件不能捕捉实时i值问题

问题描述 我们都知道,如果我们对于一组元素(相同的标签)同时进行onclick事件处理的时候(在需要获取到索引的时候),一般是写一个for循环,但是onclick是一个异步调用的,所以会带来一个问题,当我们触发这个事件的时候,我们能获取的i值是for完整执行完后i的值,而不能获取到代码顺序里i的值 首先看一段代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title

Swift利用闭包(closure)来实现传值--&gt;前后两个控制器的反向传值

一.第一个界面 // Created by 秦志伟 on 14-6-13. import UIKit class ZWRootViewController: UIViewController { init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) { super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) // Custom initializati

JavaScript利用闭包循环绑定事件

我们经常在做前端面试题的时候,会遇到循环绑定事件后,输出打印结果,很多人总是搞不清楚,今天借此机会跟大家梳理一下闭包相关作用. 1.首先我们举一个简单的例子. html部分: <a href="#">首页</a> <a href="#">作品</a> <a href="#">文章</a> <a href="#">工具</a> <

利用闭包实现多次ajax请求只执行最后一次

点一个按钮,则向服务器请求资源,不作处理时,多次点击后会有很多个请求在等待.我们知道一般我们用ajax是异步请求,那么我们快速重复点击一个按钮得到的结果其实我们并不知道是哪次点击的结果可能是第一次可能是最后一次也可能是第二次.那么我们怎么解决这个问题呢,简单粗暴的方法就是在发送请求的时候将按钮disabled在请求完成成功之后解除disabled,那么一旦请求失败请求将一直处于pending状态, 因此考虑的情况就多了success,error,complete等事件,而且不利于用户体验.aja