20150110--魔术方法魔术常量+面向对象-02

设计模式

1. 什么是设计模式?

指的是一种已经成熟话的设计规范,通过这种规范,能够达到某种指定的要实现的效果。

php中,只有简单的设计模式:单例模式,工厂模式

单例模式

1. 什么是单例模式?

单例模式,只有一个实例(对象),一个类只能产生一个对象。

要实现单例模式,必须解决以下问题

1. 确定有哪些方式可以产生新的对象:new和clone,必须禁用这两种方法:私有化构造方法和克隆方法

2. 如何在封闭了外部产生对象的途径之后,进入到内部产生?解决方案:静态方法,可以不需要在外部创建对象的前提下,可以进入到类的内部。

3. 如何在内的内部要得到对象?解决方案:在静态方法中可以创建对象

问题:该静态方法可以被多次调用,因此会产生多个对象

4. 解决方案:增加一个静态属性用来保存生成的对象,如果后面再次新增对象的话,得先判断对象是否存在,存在就不创建。

效果

对象判断方式:instanceof,判断一个对象是否属于某个类

总结:单例模式要实现:三私一公(私有化构造方法,私有化克隆方法,私有化静态属性,公有化的静态方法)

工厂模式

1. 什么工厂模式?

类似工厂一样,需要什么类的对象,就产生对应类的对象。

工厂模式要实现:能够生产对象,能够加载类。

PHP是一种既支持面向过程又支持面向对象的语言。不是所有的面向对象语言都有类的概念,如js。(可以忽略)

面向对象三大特点

面向对象的三大特点:封装,继承和多态

封装

封装:面向将数据(属性)以及对数据的操作(方法)捆绑到一起,形成对外的数据隐藏。只对外提供可以调用的接口供其使用。(public的方法和属性)

封装的过程称之为抽象:将具有相同特性的一类事务,把公共的内容抽离出来,形成文字描述的过程。

继承

继承:子辈拥有父辈的财富(属性)或者工作(方法)

如果一个类已经定义好可以使用的方法和属性了,但是有一个类想在该类的基础上进行扩展。扩展类就可以从已有的类继承,将已有的属性和方法都直接应用,而不用自己再去定义。

继承的优点

1. 便于扩展(子类可以在父类的基础上增加自己的特点)

2. 节省代码:提高代码的复用性

父类

class Father{

//财富(属性)money

//工作(方法):makeMoney();

}

子类:继承

class Son extends Father{

//没有自己工作,继承父亲的工作:makeMoney()

}

多态

多态:多种形态,在存在继承的情况下,子类必须重写父类的方法(子类拥有与父类同名的方法)

父类

class Father{

function makeMoney(){

//种树

}

}

子类:继承自父类

class Son extends Father{

function makeMoney(){

//卖菜

}

}

//模拟Java

Father father = new Son();

father.makeMoney(); //卖菜

PHP继承

继承:子类可以使用父类的属性和方法。

继承语法

父类:拥有一些可以被继承的属性和方法

子类:想拥有自己不存在但是在别的类中存在的属性和方法

关键字:extends

子类 extends 父类

继承属性的访问(类内):公有的和受保护的都可以

继承属性的访问(类外):只有公有的可以

继承内容

继承中不讲静态的继承,php中的继承是子类对象继承父类的对象。(静态的属性和方法也依然满足继承条件,可以使用)

子类会继承父类的所有的属性(非静态)和非私有的方法(非静态)

protected

受保护的,是一个专门用于继承的关键字(访问修饰限定符),用protected关键字修饰的属性或者方法,可以在子类中直接使用,但是不能在子类的外部使用。

双向继承

继承默认的是子类继承父类,但是其实在父类里面也可以同样的使用子类里面的属性和方法,只要满足(public和protected),所以认为继承是双向的。

重写

子类拥有与父类同名的属性或者方法,就会覆盖父类的属性或者方法。

属性重写

重写的效果

继承内存分析

时间: 2024-10-22 15:50:50

20150110--魔术方法魔术常量+面向对象-02的相关文章

【PHP高级特性】魔术方法/魔术常量

魔术方法 是PHP面向对象中特有的特性.它们在特定的情况下被触发,都是以双下划线开头,你可以把它们理解为钩子,利用魔术方法可以轻松实现PHP面向对象中重载(Overloading即动态创建类属性和方法).魔术方法很多还是成对出现的,以下列出目前PHP中所有的模式方法. 1.__construct和__destruct __constuct 实例化对象的时候被调用,适合用于对象的初始化操作 __destruct 明确销毁对象或脚本结束时被调用 2.__get和__set __set 当给不可访问或

PHP魔术方法和魔术常量

1>魔术常量 1.__LINE__返回文件中的当前行号.2.__FILE__ 返回文件的完整路径和文件名.如果用在包含文件中,则返回包含文件名.自PHP4.0.2 起,__FILE__总是包含一个绝对路径,而在此之前的版本有时会包含一个相对路径.3.__FUNCTION__ 返回函数名称(PHP4.3.0 新加).自PHP5 起本常量返回该函数被定义时的名字(区分大小写).在PHP4 中该值总是小写字母的.4.__CLASS__ 返回类的名称(PHP4.3.0 新加).自PHP5 起本常量返回该

php中常用魔术方法的举例

魔术方法是php面向对象特有的功能,并且有时候能实现意想不到的效果,包括前面提到的构造函数.析构函数.还有__clone函数,另外再简单的介绍几个: 1.__toSring和__invoke 1 class Moshu{ 2 public function __tostring(){ 3 return "This is the Class MagicTest.<br />"; 4 } 5 public function __invoke($x){ 6 echo "

PHP魔术变量和魔术方法

基础知识:魔术变量和魔术方法 魔术变量:最初PHP魔术变量的出现主要是为了方便开发者调试PHP的代码;当然也可以利用这个实现特殊需求.在写法上魔术变量前后都有两个下划线. 如:_LINE_:返回文件中的当前行号,我们在定位错误的时候经常用到. 魔术方法:主要是随着PHP的面向对象特性出现的(出就是PHP5之后),主要解决的是PHP在面向对象的思想中所遇到的一些特殊情况.魔术方法使用两个下划线开头.所有的魔术方法都需要给予public属性. 如:__construct():通用的类构造函数. PH

PHP魔术方法汇总

魔术方法是PHP面向对象中特有的特性.它们在特定的情况下被触发,都是以双下划线开头,你可以把它们理解为钩子,利用模式方法可以轻松实现PHP面向对象中重载(Overloading即动态创建类属性和方法).魔术方法很多还是成对出现的,以下列出目前PHP中所有的模式方法. 1.__construct,__destruct__constuct构建对象的时被调用:__destruct明确销毁对象或脚本结束时被调用: 2.__get,__set__set当给不可访问或不存在属性赋值时被调用__get读取不可

HP叫魔术方法的函数

PHP5.0后,php面向对象提成更多方法,使得php更加的强大!! 一些在PHP叫魔术方法的函数,在这里介绍一下:其实在一般的应用中,我们都需要用到他们!! 1.__construct() 当实例化一个对象的时候,这个对象的这个方法首先被调用. Java代码 class Test { function __construct() { echo "before"; } } $t = new Test(); class Test { function __construct() { ec

11、PHP魔术方法使用总结

PHP魔术方法使用总结 魔术方法是PHP面向对象中特有的特性.它们在特定的情况下被触发,都是以双下划线开头,你可以把它们理解为钩子,利用模式方法可以轻松实现PHP面向对象中重载(Overloading即动态创建类属性和方法).魔术方法很多还是成对出现的,以下列出目前PHP中所有的模式方法.1.__construct,__destruct__constuct构建对象的时被调用:__destruct明确销毁对象或脚本结束时被调用:2.__get,__set__set当给不可访问或不存在属性赋值时被调

php常用的魔术方法

__construct:构造函数,一旦创建对象都就会自动调用 __call:当调用了未定义的方法时会自动触发 __set:当给类外部不可访问的属性设置值时会自动触发 __get:当获取类外部不可访问的属性时会自动触发 __isset:当对类外部不可访问的属性使用了isset()或empty()时会自动触发 __unset:当对类外部不可访问的属性使用了unset()时会自动触发 __destruct:当对象结束其生命周期时就会自动触发 <?php header("content-type:

PHP魔术方法使用总结

魔术方法是PHP面向对象中特有的特性.它们在特定的情况下被触发,都是以双下划线开头,你可以把它们理解为钩子,利用模式方法可以轻松实现PHP面向对象中重载(Overloading即动态创建类属性和方法).魔术方法很多还是成对出现的,以下列出目前PHP中所有的模式方法.1.__construct,__destruct__constuct构建对象的时被调用:__destruct明确销毁对象或脚本结束时被调用:2.__get,__set__set当给不可访问或不存在属性赋值时被调用__get读取不可访问