PHP笔记(二)

(一)自动加载

魔术方法总结
 __construct():构造函数,new一个对象的时候自动调用,为实例化的对象赋初值等操作
 __destruct():析构函数,对象被注销的时候自动调用,可以打印出些东西来

__get():只要是访问对象的私有属性(无论内外),都会自动调用,传递需要读取的属性名,切记要return回来这个属性名
 __set():只要是修改对象的私有属性(无论内外),都会自动调用,传递需要修改的属性名,切记要return回来这个属性名

__unset():删除对象的私有属性时自动调用,传入被删除的属性名,在函数里再写一遍unset函数
 __isset():使用isset检测对象的私有属性时自动调用 ,传递被检测的属性名。返回isset属性名

__toString():使用echo打印对象的时候,自动调用。显示想要现实的内容,一般写个定界符的变量。注意返回字符串
 __call():当调用未公开的(即私有的不存在)的函数时,自动调用,传入 被调用函数的名,和一个数组,里面放的参数列表
 __clone():使用clone克隆对象时,并可以对新克隆出来的对象赋初值。
 __sleep():对象串行化时,自动调用。返回一个数组,数组元素就是我们需要串行化的属性
 __wakeup():对象反串行化时,自动调用。对反串行化的属性赋初值。
 __autoload():最重要的。在类的外部调用,而且当调用不在本文档中的类时,会自动导入对应的类文件

1.自动加载
 function __autoload($className){
include strtolower($className).".class.php";
}
 注意:
 这个会在实例化一个对象的时候,如果用到的类不在当前文件,那就会自动调用这个函数。如果存在了,就不会调用这个函数。
 这个导入对于同一个类文件只会导入一次,导入一次之后,类就已经拷贝过来了,相当于在类中了,再实例化,就不调用他了
 切记,以后 类文件 都写入到一个专门的文件夹中,而且格式必须同一,完全小写,特别是类名,必须小写,别忘了
 include strtolower($className).".class.php"; 注意格式,2个点一定不能忘了
 这个在实例化时,会自动将不存在的类名宁当作参数传给 __autoload();然后我们把他strtolower转小写,拼串

 2.对象的序列化与反序列化。也叫 串行化和反串行化
 serialize串行化;unserialize反串行化
 $str=serialize($lisi); 他就是把对象转换成 一溜 字符串的形式 ,这样就可以用echo打印了
echo $str."<br/>";
$str1=unserialize($str); 将已经序列化的对象使用反序列化函数转变回来,又成为了一个对象了。
 var_dump($str1);

使用串行化的情况
 对象数据需要在网络中传输的时候;
 对象数据需要写在文件中,在数据库中长期保存对象数据。

 3. __sleep
 当执行对象串行化的时候,也就是调用serialize函数的时候。会自动执行__sleep函数,而且他需要返回一个数组
 数组里写了哪些成员属性,那些成员属性就可以串行化。注意,当数组里不写属性,就是所有属性都不串行化。如果不写
 __sleep函数就是默认所有的属性都串行化。

4. __wakeup
 当执行对象反串行化的时候,也就是调用unserialize函数的时候。会自动执行__weekup函数,他可以为反串行化
 的属性重新赋值
 function __wakeup(){
$this->name="王文彦";
}
 $b=unserialize($a);
echo $b->name; 这个就打印出 王文彦来了

 5.类型约束
 指在变量前加上数据类型,用于强制约束此变量的类型,使这个变量只能接收这种类型的数据,其他类型无法接收
 function func(array $a){
var_dump($a);
}
func(["aaa",1]);
注意:只有 数组和对象才能进行类型约束,其他的 Number、String等在PHP中是不行的,其他强语言可以

function func(array $a){
echo $a->name;
}
func(new Student("桑桑",15,"女生"));
 注意,如果是类的话,只能 是对应的类和这个类的子类
 注意:在PHP中,数据约束只用在 函数形参 中,其他地方是不能使用的,会报错。
 new Student();这是直接创建了一个 匿名对象,就是没赋给变量而已,存在,但是咱不好找

(二)抽象类

 对象串行化
 1. clone和__clone
 引用数据类型,传递的是地址,所以改一个,另一个也变。
 但是通过clone将一个对象完全克隆出另一个对象,这两个对象是独立的,互不干扰的。
 $lisi= clone $zhangsan; 当外部对象使用clone关键字的时候,会自动调用__clone魔术方法。
 __clone函数,类似于克隆时调用了一遍构造函数,可以给新的克隆的对象的属性赋新值,不写,就是赋的原来被克隆对象的值
 __clone函数里的$this指的是当前,新的对象

 2. __toString函数
 echo $lisi;当使用echo等输出语句,打印对象的时候,就会自动调用__toString函数,并打印出这个函数内return回来的东西。
 3. __call函数
 $zhangsan->say1(1,2,3); 当调用未定义的函数、或者私有的函数时,会自动调用这个魔术函数
 function __call($name,$canshu){
echo "您调用的函数未定义";
var_dump($name); //直接打印出第一个形参
var_dump($canshu); //直接打印出第二个形参
} 第一个参数 是我们调用的函数的名,第二个参数是数组,是我们我们调用此方法是传的参数

(三)接口

【抽象类】
 1.什么是接口?
 接口是一种规范,提供了一组实现接口的类所必须实现的方法组合,
 接口使用interface关键字声明;

interface Inter{}

 2.接口中的所有方法,必须都是抽象方法。
 接口中的抽象方法不需要也不能使用abstract修饰

 3.接口中不能声明变量,不能有属性,只能使用常量!!!
 const NUM = 10;

 4.接口可以继承接口,使用extends关键字!
接口使用extends继承接口,也不能实现多承。
 interface int1 extends Inter{}

 5.类可以实现接口,使用implement关键字!
 类使用implement实现接口,可同时实现多个接口,多个接口间使用逗号分隔;
 class Person implements Inter,inter2{}

一个类实现一个或多个接口,那么这个类必须实现所有接口中的所有抽象方法!除非,这个类是抽象类

【接口与抽象类区别】
 1、声明方式上,接口使用interface关键字,抽象类使用abstract class
 2、实现/继承方式上,一个类使用extends继承抽象类,使用implement实现接口
 3、抽象类只能单继承,接口可以多继承(接口extends接口)多实现(类implement接口);
 4、抽象类中可以有非抽象方法,接口中只能有抽象方法,不能有非抽象方法;
 抽象类中的抽象方法必须使用abstract关键字修饰,接口中抽象方法不能带修饰词;
 5、抽象类是个类,可以有属性、变量;接口中只能有常量

(四)多态

【多态】
 1、一个类,被多个子类继承。如果,这个类的某个方法,在多个子类中,表现出不同的功能,我们称这种行为为多态

2、实现多态的必要途径
 ①子类继承父类;
 ②子类重写父类方法;
 ③父类引用指向子类对象;

时间: 2024-11-16 08:56:31

PHP笔记(二)的相关文章

老男孩培训视频听课笔记二(在51cto上听的)

centos 5.8 文本安装过程    引导采用默认,引导不用设置密码    网络配置,根据实际情况配置,网关是网络出口的地址,一般为wlan出口的路由器的地址或者是代理服务器的内网IP    DNS简单解说图:      主机名--时区--root密码    选择自定义系统安装包--最小化(安全方便工作,建议安装以下的组)      ·base-- 基础      ·editors-编辑器      ·development librarays--开发库      ·development

《卓有成效的程序员》----读书笔记二

六大方面对比Launchy和TypeAndRun(TAR) 对于快速启动工具,很多人都有自己的偏好,多次听到朋友介绍Launchy的好,虽然自己一直在使用着TAR,还是克制不住对于好软件的渴求,下载Launchy进行试用.很多软件都是有一个试用期的,也许新的软件确实不错,但是你习惯了以前使用的那个软件.今天就比较客观的将Launchy和TAR进行一下对比,从界面.上手速度到功能.自定义,以及软件的稳定性.占用资源进行详细的比较. [界面美观]Launchy:毫无疑问这是它的强项.1.0正式版自带

Caliburn.Micro学习笔记(二)----Actions

Caliburn.Micro学习笔记(二)----Actions 上一篇已经简单说了一下引导类和简单的控件绑定 我的上一个例子里的button自动匹配到ViewModel事件你一定感觉很好玩吧 今天说一下它的Actions,看一下Caliburn.Micro给我们提供了多强大的支持 我们还是从做例子开始 demo的源码下载在文章的最后 例子1.无参数方法调用 点击button把textBox输入的文本弹出来 如果textbox里没有文本button不可点,看一下效果图 看一下前台代码 <Stac

《逻辑思维简易入门》(第2版) 阅读笔记二

<逻辑思维简易入门>(第2版) 阅读笔记二 本周阅读的是<逻辑思维简易入门>的第三章,也就是说,本书的第一部分就已经读完了. 第三章.信念的优点 信念和负信念是人们在接受一个事物时一种心理态度,延伸来说也就是对事物的认知态度.因为我们在研究 逻辑思维的时候,都有一个前提:“以正常情况以及说话者真诚”,所以有人如果对于一件事物不做回应,我们可以认为这是一种既不相信,也不怀疑的的态度. 信念的优缺点有很多,在书中主要介绍了下面几种: 1.准确性 好的信念实在准确的表达事实,同样真的信念

2. 蛤蟆Python脚本学习笔记二基本命令畅玩

2. 蛤蟆Python脚本学习笔记二基本命令畅玩 本篇名言:"成功源于发现细节,没有细节就没有机遇,留心细节意味着创造机遇.一件司空见惯的小事或许就可能是打开机遇宝库的钥匙!" 下班回家,咱先来看下一些常用的基本命令. 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/48092873 1.  数字和表达式 看下图1一就能说明很多问题: 加法,整除,浮点除,取模,幂乘方等.是不是很直接也很粗暴. 关于上限,蛤蟆不太清楚

Emacs 笔记二

Emacs 笔记二 Table of Contents 1. 前言 2. emacs基本操作(常用快捷键) 3. emacs模式讲解 4. emacs缓冲区 5. org mode 5.1. 列表 5.2. 快键键 5.3. 内嵌元素(插入代码什么的) 5.4. 表格 1 前言 最近在学着写博客,发现MarkDown真乃神器,于是去找了很多markdown的工具,发现作业部落 最好的那个,而无意间又发现了org-mode火爆到极致 非常被人推崇,其实作业部落 已经是能很完美的满足我的需求了,但是

《Programming in Lua 3》读书笔记(二十二)

日期:2014.8.6 PartⅣ The C API 26 Extending Your Application 使用Lua很重要的一点是用来做配置语言.配合主语言做一些功能的配置. 26.1 The Basics 有的时候程序需要配置一些功能信息,很多时候可能有许多别的方法比用lua做配置要更简单:如使用环境变量或者读取文件,读取文件涉及到文件的解析.如果使用Lua进行配置的话,相当于用lua文件替代了要读取的如csv.txt文件等. 使用Lua进行配置的时候,就需要使用Lua API去控制

小猪的数据结构学习笔记(二)

小猪的数据结构学习笔记(二) 线性表中的顺序表 本节引言: 在上个章节中,我们对数据结构与算法的相关概念进行了了解,知道数据结构的 逻辑结构与物理结构的区别,算法的特性以及设计要求;还学了如何去衡量一个算法 的好坏,以及时间复杂度的计算!在本节中我们将接触第一个数据结构--线性表; 而线性表有两种表现形式,分别是顺序表和链表;学好这一章很重要,是学习后面的基石; 这一节我们会重点学习下顺序表,在这里给大家一个忠告,学编程切忌眼高手低,看懂不代表自己 写得出来,给出的实现代码,自己要理解思路,自己

JavaScript--基于对象的脚本语言学习笔记(二)

第二部分:DOM编程 1.文档象模型(DOM)提供了访问结构化文档的一种方式,很多语言自己的DOM解析器. DOM解析器就是完成结构化文档和DOM树之间的转换关系. DOM解析器解析结构化文档:将磁盘上的结构化文档转换成内存中的DOM树 从DOM树输出结构化文档:将内存中的DOM树转换成磁盘上的结构化文档 2.DOM模型扩展了HTML元素,为几乎所有的HTML元素都新增了innerHTML属性,该属性代表该元素的"内容",即返回的某个元素的开始标签.结束标签之间的字符串内容(不包含其它

马哥学习笔记二十四——分布式复制快设备drbd

DRBD: 主从 primary: 可执行读.写操作 secondary: 文件系统不能挂载 DRBD: dual primay, 双主(基于集群文件系统的高可用集群) 磁盘调度器:合并读请求,合并写请求: Procotol:drbd数据同步协议 A: Async, 异步  数据发送到本机tcp/ip协议栈 B:semi sync, 半同步  数据发送到对方tcp/ip协议 C:sync, 同步  数据到达对方存储设备 DRBD Source: DRBD资源 资源名称:可以是除了空白字符外的任意