php基础语法之魔术方法.docx

上传人:b****5 文档编号:5223483 上传时间:2022-12-14 格式:DOCX 页数:13 大小:752.02KB
下载 相关 举报
php基础语法之魔术方法.docx_第1页
第1页 / 共13页
php基础语法之魔术方法.docx_第2页
第2页 / 共13页
php基础语法之魔术方法.docx_第3页
第3页 / 共13页
php基础语法之魔术方法.docx_第4页
第4页 / 共13页
php基础语法之魔术方法.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

php基础语法之魔术方法.docx

《php基础语法之魔术方法.docx》由会员分享,可在线阅读,更多相关《php基础语法之魔术方法.docx(13页珍藏版)》请在冰豆网上搜索。

php基础语法之魔术方法.docx

php基础语法之魔术方法

魔术方法,magicmethod

在特定的情况下,会被自动调用的方法,通常负责完成某块独立的功能的方法称之为魔术方法!

特点:

1,需要用户脚本定义,不定义不执行!

2,命名方式都是以__开头!

总结:

__construct

__destruct

__sleep

__wakeup

__set

__get

__isset

__unset

__clone

__call

__callStatic

__autoload()//魔术函数

__invoke()

将一个对象,当作函数调用时,会触发该对象的__invoke()方法,由此方法,就可以调用,没有该方法就不能调用!

回想匿名函数

$say中是啥?

对象!

语法是调用对象的语法?

为什么,匿名函数对象(ClosureL类对象)可以,但是普通类对象不行?

__invoke是php实现匿名函数不可或缺的部分!

此时,也可以传递参数,为对象传递参数,就是为invoke魔术方法传递参数!

__toString()

转换到字符串的意思!

当将对象当作字符串使用时,会自动调用该对象的魔术方法!

如果此时,存在toString魔术方法,即可以完成转换。

toString的返回值,就是转换的结果,一般转换对象的标志性的属性即可!

静态延迟绑定,static

>=5.3

问题:

1,$this永远代表所在类的对象?

不是

2,self用于代表所在类么?

是,永远代表所在类的对象!

看逻辑:

显然,当前的逻辑不是十分完善!

此时,应该是表示当前类的关键字,最好应该在调用时决定最好!

(self不能做到)

此时,采用一个新的关键字,代表当前类,与self不同,在于是运行时调用时决定,而不是在类编译时就确定好了的!

关键字是:

static。

总结:

static关键字的功能:

1,声明静态局部变量

2,声明静态成员

3,当前类,运行时的当前类!

类中,可以表示类的关键字:

self,所在类

static,调用类

parent,父类

参数类型约束

约束函数,或者方法类参数的类型,只能是某个类的对象!

php是弱类型,变量可以存储任意类型的数据!

函数,方法的参数也是可以接受任意类型!

但是参数,可以被规定为,某个类的固定对象!

在参数前增加类名即可!

注意,只支持类名!

还支持数组!

对象的遍历

对象是一个集合数据类型!

简单的遍历,foreach

foreach,可以遍历对象

遍历对象,是依次获得对象拥有的属性的信息!

留意,访问修饰可以影响!

自定义遍历,iterator,迭代器接口

场景:

在遍历班级时,就相当于,遍历的班级的所有学生,而不不是遍历班级的所有属性!

此时,需要使用接口编程实现。

foreach时,php回去判断当前所遍历的对象的类,是否类实现一个叫iterator(迭代器)接口!

不是的话,就会依次得到对象每个属性!

(简单遍历)

是的话,会在foreach执行时,通过调用接口内规定的各个方法来完成这个遍历!

两个问题:

foreach的流程:

Iterator接口的内容:

预定义的!

php定义好了的!

显然,php的foreach的五个重要的步骤,依赖于接口中定义的5个方法!

编程实现,是需要遍历学生信息:

1,类要实现Iterator接口

2依次完善抽象方法

常用的对象,类函数

is_object();

class_exists();

interface_exists();

get_class();

get_parent_class();

get_class_vars();得到类的变量(属性)

get_class_methods();得到类的方法

get_declared_classes();得到所有已经定义的类!

可以见,有自定义类,和预定义类!

stdClass,内置的标准类!

__PHP_Incomplete_Class

Closure

魔术常量

__CLASS__,当前类名。

注意:

可以newself不可以new__CLASS__。

__METHOD__,当前方法名。

区别__FUNCTION__。

__FILE__

__DIR__

__LINE__

__FUNCTION__

面向对象的特征

封装,

继承

多态

快速排序

分治。

分而治之!

核心思想:

解决一个难度为N的问题,与解决2个难度为N/2相比!

冒泡解决6个元素的问题?

需要比较几次?

5,4,3,2,1=15

冒泡3个元素的问题两次?

2,1=3

2,1=3

思路:

将整体的待排序序列,分割成两个部分!

分割的原则,跳出一个参考元,将比参考元大的,放一起,比参考元小的放在一起!

假设第一个为参考元!

接下,再对,分割的两个子序列,再次分割!

直到所有的分割的待排序序列内,元素数量为一个或者0个!

实现的时候,应该注意:

1,选择参考元的问题。

编程实现:

递归实现!

递归点:

递归出口:

待排序的序列元素个数为1或者0,则不需要再递归了!

步骤:

1,判断是否是需要再次递归(递归出口)

2,选择参考元(第一个元素)

3,将数组分割成两个部分。

4,递归对分割的两个部分进行分别排序

5,将小于与参考元与大于三个部分合并起来!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 动态背景

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1