PHP面向对象

PHP面向对象(一)

个人分类: PHP

self-----------代表类本身,只能在当前类内部的函数中使用,代表代码所在的类;

$this----------代表当前类的当前对象(在对象调用的方法中使用$this 就代表哪个类的对象),在子类对象调用继承自父类的方法时,方法中的$this 是子类的对象;;如果是在static静态方法中,不能使用;

static-------作用1:静态变量; 作用2:静态方法;静态方法中不能调用非静态方法;作用3:调用的是static所在的这个个方法,哪个类调用这个方法,static就代表这个类,作用4:静态绑定;

parent------代表父类,

 

类中只有个三种成员:属性,方法,常量;

除了这三种成员外,其他的如流成控制语句if ,while,for,case等都只能在函数中使用;

 

PHP面向对象

类中的属性 前面要加上var  ;类之外的变量不需要加var ;

PHP面向对象

 

访问修饰符:public,protected,private;----不写默认是public;

PHP面向对象

调用:对象->属性;(不加$)

            对象->方法;

        

PHP面向对象

 

PHP面向对象

注意方法4 不加括号;

 

PHP面向对象

PHP面向对象

对象的变量进行普通传值得时候,复制的是对象变量中所存储的对象标识符;对象标识符指向真正的数据;

 

PHP面向对象

 

-------------------------------------------------------------------------

对象的属性可以定义不赋值,不能是表达式和变量,可以是直接值和常量;前面必须加上public或var;

变量必须定义的同时赋值;

PHP面向对象

定义属性时 $前面必须要加上var 或public,

在函数中计算的时候用  $变量名  就可以了;

定义属性的时候要加var $或者 public $;在调用属性的时候不要加var $或者 public $;

PHP面向对象

           pow(9,0.5);----------------9的0.5次方

PHP面向对象

$this 是一个伪对象,代表当前类的当前对象;

PHP面向对象

-----------------------------

------------------静态属性-----------------------------------------

静态属性隶属于类本身,同一个类的所有对象共享数据;

PHP面向对象

 

静态属性的调用-------------用类名去调用********类名::$静态属性名;

静态属性的调用-------------用对象去调用********对象名::$静态属性名;

 

PHP面向对象

----------------------通过对象也可以使用静态属性--------------------

PHP面向对象

获取对象所属的类名:get _class();

PHP面向对象

只是得到一个类的名称,并不能得到这个类;

 

----------------静态方法-----------------------

静态方法属于类,所有对象共有;

静态方法的调用-------类名::静态方法名();

对象亦可以调用静态方法------对象名::静态方法名();

静态方法中不能使用$this;静态方法中不能调用非静态方法;

 

类调用一般的非静态方法或静态变量,只能在自己的类中调用,其他地方调用会报错;类调用静态方法可以在任何地方;

PHP面向对象

$this----------代表当前类的当前对象;如果是在static静态方法中,通过类名调用静态方法不能使用$this;静态方法是用类调用,此时没有对象;

 

PHP面向对象

静态方法中不能调用非静态方法,静态方法中可以用self(代表当前类),通过类名调用的静态方法不能用$this;一般方法中可以用this(代表当前对象)

 

==============构造方法=============

PHP面向对象

PHP面向对象

new的时候,会自动调用__construct($n,$a);如果定义构造方法,则调用时的实参必须和构造方法的参数个数一致;

如果不实现__condtruc()构造方法,系统会默认执行父类的构造方法;如果父类没有,就一直往上找,最终找到系统的不带参数的构造方法,那么就对结果没有影响;

$p=new p("lisi",18);//用构造方法创建一个对象;

PHP面向对象

==============析构方法=============

 

 

析构方法不能手动调用,在销毁对象unset()时会自动调用,析构方法可以用于清理一些在PHP代码结束后不能清理的数据,如生成的文件;

程序结束的时候,所有对象被销毁,会调用析构方法;销毁对象unset()时也会调用析构方法;改变对象变量的值,原来变量指向的对象没有被变量指向,就会销毁对象,也会调用析构方法;

function __destruct(){

 

}

 

PHP程序结束后,PHP所有的对象自动销毁,析构方法是PHP内部的垃圾回收机制;

 

PHP面向对象

PHP面向对象

 

总结:

子类中没有定义构造方法会自动调用父类的构造方法,实例化子类的时候会按照父类的构造方法进行;

子类中定义了自己的构造方法,则不会自动调用父类的构造方法,但是可以手动调用parent ::__construct();

析构方法和构造方法用法相同。

 

------------------类的继承-----------------------

PHP面向对象

类的继承:   Class A类  extends  B类{

 

}

PHP面向对象

访问修饰符---------------------------------------------

PHP面向对象

PHP面向对象

上面的例子是子类访问父类的属性$p1;

下面这个例子是父类访问子类的属性$p2,但是不常用;要注意:

PHP面向对象

 

protected收保护的,只能在当前类或者有继承关系的上下级使用;

PHP面向对象

 

private修饰符只能在本类中使用:

PHP面向对象

PHP面向对象

parent,self,this--------------------------------

PHP面向对象

PHP面向对象

parent :  : 父类的方法;

self :: 自己的方法或者继承父类的方法;

$this ->自己的方法或者继承父类的方法;

 

系统有默认的构造方法:function __construct(){   },如果自己在类中实现 了构造方法,就会覆盖系统的构造方法;

子类中没有定义构造方法会自动调用父类的构造方法,实例化子类的时候会按照父类的构造方法进行;

子类中定义了自己的构造方法,则不会自动调用父类的构造方法,但是可以手动调用parent ::__construct();

析构方法和构造方法用法相同。

 

PHP面向对象

 

PHP面向对象

 

PHP面向对象

PHP面向对象

//=================链接数据库==============

PHP面向对象

PHP面向对象

PHP面向对象

-------------------重写override-------------------------

PHP面向对象

重写针对的是非构造方法和非析构方法;

将从父类继承下来的属性和方法重写或者覆盖;覆盖是建立在继承的基础上,如果没有继承,谈不上覆盖重写了;

PHP面向对象

PHP面向对象

访问控制的权限不应该低于上一级的权限;

重写的普通方法的参数个数必须和父类的参数个数一致,参数的名字可以写成不一样的;

构造方法可以重写,参数也可以不一致;

私有的属性和私有的方法,不能覆盖,但子类可以定义和父类同名的方法和属性,但是只作为当前类的自有属性;

PHP面向对象

-------------最终类和最终方法----------------------------

PHP面向对象

最终类不能被继承,最终方法不能被重写;

 

---------------------设计模式-----------

工厂方法:

PHP面向对象

file_exists--------判断文件是否存在;

单利模式:

关键点:private 构造方法,private clone方法;

PHP面向对象

PHP面向对象

构造方法私有了,只能在类内部使用,外部new的时候就不会调用,这样就创建不了对象;

PHP面向对象

clone 是运算符,复制一个对象;new也是运算符;他们两个的优先级最高;

 

注意:上面 的clone $o1是运算符,不是类中默认的clone方法,在做单利的时候必须把默认的 function __clone(){}方法private,执行clone $o1 时,类中默认的clone方法才不会执行,否则,就会执行系统默认的clone方法;

构造方法,clone方法都叫魔术方法(就是系统默认的隐藏的方法);

 

PHP面向对象

PHP面向对象

========抽象类,抽象方法===========

PHP面向对象

 

PHP面向对象

抽象类专门做父类,子类继承他;

PHP面向对象

PHP面向对象

=============重载是在同一个类中;重写是在不同的类中;

PHP面向对象

PHP面向对象

PHP面向对象

PHP面向对象

上面:$o1->p2=2不存在,先调用下面一个set,然后不不存在的属性和值存起来,然后$o1->p2不存在,又再调用上一个get,从而得到数组中值;

PHP面向对象

方法重载:使用对象调用一个不存在的方法时。

在类中可以调用类外面并且不是类中的方法。

PHP面向对象

PHP面向对象

 

PHP面向对象

==============接口----------------

PHP面向对象

接口可以实现多继承,类不能实现多继承;接口的作用就是统一;

类实现接口;

PHP面向对象

一个类只能继承一个父类,但是可以实现多个接口;

PHP面向对象

----------------自动加载技术和克隆技术--------------

第一种方法:

PHP面向对象

第二种方法:

PHP面向对象

 

---------------对象的复制:

PHP面向对象

浅克隆:克隆的是非对象非资源数据;

 

PHP面向对象

PHP面向对象

 

深度克隆---------------

PHP面向对象PHP中默认克隆是浅克隆,要想一个对象的所有属性数据都被克隆,就需要使用魔术方法__clone()里面实现深度克隆;

PHP面向对象PHP面向对象

PHP面向对象

对象的遍历:

对象遍历只能遍历属性:

PHP面向对象

自定义遍历(局部遍历):

PHP面向对象

PHP面向对象PHP面向对象

 

------------------------PHP内置标准类:

内置标准类:new stdclass();

PHP面向对象

 

对象类型转换-------其他类型转换成对象:

PHP面向对象

PHP面向对象

PHP面向对象

PHP面向对象

 

 

纯字符下标的数组才适合转换成对象。数字下标的数组转成对象,不能通过数字下标访问属性;

 

PHP面向对象

PHP面向对象标量转换成对象:

PHP面向对象

PHP是弱类型语言,无需为变量指定类型;PHP中只能对对象,接口,数组,函数进行约束;

 PHP面向对象PHP面向对象

类型约束:

 

PHP面向对象

PHP面向对象

 

PHP面向对象

get_class(对象)也可以获取类名,但是必须要有一个对象;

 

==================数据序列化:===============

PHP面向对象

PHP面向对象PHP面向对象

序列化:$str=serialize($变量);

将文件存储起来:file_put_contents("文本文件路径",$str);

PHP面向对象

 

PHP面向对象

 

 

 

反序列化:

 

 PHP面向对象

 

 

PHP面向对象

 

 

 

类和对象的系统函数:

 

 

PHP面向对象

PHP面向对象PHP面向对象

PHP面向对象

PHP面向对象

PHP面向对象PHP面向对象

 

 

PHP面向对象PHP面向对象

PHP面向对象

PHP面向对象

PHP面向对象

PHP面向对象PHP面向对象PHP面向对象

PHP面向对象PHP面向对象

PHP面向对象

PHP面向对象

 

PHP面向对象

PHP面向对象

PHP面向对象

PHP面向对象

PHP面向对象

PHP面向对象

static 的不同用法:

PHP面向对象

PHP面向对象

 

多态:

PHP面向对象PHP面向对象PHP面向对象

PHP面向对象