The understanding of superman and the realization of super factory pattren

干货分享,请自行补脑

今天,我们来讲工厂模式的生活loC容器,只需要一条指令就可以生产出超人出来。

在讲解loC容器之前,我们先来了解一个知识点:回调函数,就是通过函数指针来调用的函数。当你把函数的指针作为参数传递给函数另一个函数,当这个指针被用来调用其所指向的函数的时候,我们就说这是回调函数。话不多说,直接上代码:

The understanding of superman and the realization of super factory pattren_第1张图片
回调函数的实现

代码解读:

1:我们定义了一个叫做calllback()的php函数,这个函数需要两个参数msg1,msg2.

2:使用php内置函数call_user_func_array()函数来进行回调,这个函数需要两个参数,一个是需要回调的函数的函数名字,如图我们已经赋值给$name,另一个参数是一个数组,这个数组的元素是回调函数的参数。我们执行这段代码看看会输出什么?

The understanding of superman and the realization of super factory pattren_第2张图片
回调函数执行结果

如图,在浏览器中输出了函数内的代码。

我们继续研究,php类中静态方法的回调,如图


The understanding of superman and the realization of super factory pattren_第3张图片
类的静态方法的回调


The understanding of superman and the realization of super factory pattren_第4张图片
类的静态方法回调结果展示

好了,我们来分析这段代码,可以看到,call_user_func_array();函数还是需要传入两个参数,只不过第一个参数变成了一个数组,数组中第一个值是类名第二个值是类中的方法名字,这样的情况下我们就可以完成类中静态方法的调用,效果如图。

继续研究:类中非静态的方法回调


The understanding of superman and the realization of super factory pattren_第5张图片
类中非静态方法的实现
The understanding of superman and the realization of super factory pattren_第6张图片
类中非静态方法的展示

可以看得出效果其实是一样的。

我们继续研究:在类中定义一个私有属性,并且在方法中调用,然后回调此方法


The understanding of superman and the realization of super factory pattren_第7张图片
定义属性,并且在方法中调用,然后回调方法


The understanding of superman and the realization of super factory pattren_第8张图片
报错了,在没有对象的情况下使用了$this

可见我们的程序在51行出现了错误,$this没有在对象环境中调用。

如果我们创造一个对象出来,同时使用这个对象作为参数传入,同样会报错。

那么,我们如何才能调用对象中的方法呢?

对象方法的回调

我们首先使用原始的字符串方式来调用方法:

The understanding of superman and the realization of super factory pattren_第9张图片
字符串方式调用方法
The understanding of superman and the realization of super factory pattren_第10张图片
字符串方式调用结果展示,能够正确执行程序

结果出来了,但是有一个问题,我们如何将参数传给这个方法呢?

The understanding of superman and the realization of super factory pattren_第11张图片
匿名函数 实对象调用


The understanding of superman and the realization of super factory pattren_第12张图片
实现了

匿名函数的讲解,我们暂时告一段落。

(未完待续)

你可能感兴趣的:(The understanding of superman and the realization of super factory pattren)