PHP面向对象三大特点学习_第1页
PHP面向对象三大特点学习_第2页
PHP面向对象三大特点学习_第3页
PHP面向对象三大特点学习_第4页
PHP面向对象三大特点学习_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本文格式为Word版,下载可任意编辑——PHP面向对象三大特点学习PHP面向对象三大特点学习

PHP面向对象三大特点学习学习目标:充分理解抽象、封装、继承、多态。跟随我一起去了解下!

面象对向的三大特点:封装性、继承性、多态性首先简朴理解一下抽象:

我们在前面定义一个类的时候,实际上就是把一类事物共有的属性和行为提取出来,形成一个物理模型(模版),这种研究问题的方法称为抽象

一、封装性

封装就是把抽取出来的数据和对数据的操作封装在一起,数据被养护在内部,程序的其他片面只有被授权的操作(方法)才能对数据举行操作。

php供给了三种访问操纵修饰符

public表示全局,本类内部,类外部,子类都可以访问

protected表示受养护的,只有本类或子类可以访问

private表示私有的,只有本类内部可以访问

以上三种修饰符既可以修饰方法也可以修饰属性(变量),方法假设没有访问修饰符那么默认是public,成员属性务必指定访问修饰符,在PHP4中也有这种写法var$name,表示公开属性,不推举这种写法

例:

复制代码代码如下:

?php

classPerson

public$name;

protected$age;

private$salary;

function__construct$name,$age,$salary

$this-name=$name;

$this-age=$age;

$this-salary=$salary;

publicfunctionshowinfo

//这表示三个修饰符都可以在本类内部使用

echo$this-name.||.$this-age.||.$this-salary;

$p1=newPerson张三,20,3000;

//这里属于类外部,那么假设用下面的方法访问age和salary都会报错

//echo$p1-age;echo$p1-salary;

?

那么现在就想在外部访问protected和private的元素和方法该怎么办?通常做法是通过public函数去访问这些变量格式:

publicfunctionsetxxxx$val

$this-xxxx=$val;

publicfunctiongetxxxx

return$this-xxxx;

这里带set和get只是为了识别便当,并非必要

如:

publicfunctiongetsalary

return$this-salary;//扩展:这里可以调用一些方法,如判断用户名等,正确才给访问

在外部就可以通过echo$p1-getsalary;

假设要访问protected和private也可以使用以下方法,但不推举使用,只要了解即可

__set和__get

__set对protected或private属性举行赋值操作

__set$name,$val;

__get获取protected或private的.值

__get$name;

如:

复制代码代码如下:

?php

classtesta

protected$name;

//使用__set来管理全体属性

publicfunction__set$pro_name,$pro_val

//上面$pro_name和$pro_val可自定义

//下面$this-pro_name为既定,不成更改

$this-pro_name=$pro_val;

//使用__get来获取全体属性值

publicfunction__get$pro_name

ifisset$pro_name

return$this-pro_name;

else

returnnull;

$n1=newtesta;

//正常处境,类外部是不能访问protected属性的,但是用了上面的方法就可以对它们举行操作

$n1-name=小三;

echo$n1-name;

?

//以上代码看懂就行,不推举使用

二、继承性

先看一个例子:

复制代码代码如下:

?php

classPupil

public$name;

protected$age;

publicfunctiongetinfo

echo$this-name.||.$this-age;

publicfunctiontesting

echothisispupil;

classGraduate

PHP面向对象三大特点学习

public$name;

protected$age;

publicfunctiongetinfo

echo$this-name.||.$this-age;

publicfunctiontesting

echothisisGraduate;

?

从上面的例子可以看出,当多个类有好多共同属性和方法时,代码的复用性不高,代码冗余,斟酌css中的处理方法

解决方法:继承

复制代码代码如下:

?php

classStudents

public$name;

public$age;

publicfunction__construct$name,$age

$this-name=$name;

$this-age=$age;

publicfunctionshowinfo

echo$this-name.||.$this-age;

classPupilextendsStudents

functiontesting

echoPupil.$this-name.istesting;

classGraduateextendsStudents

functiontesting

echoGraduate.$this-name.istesting;

$stu1=newPupil张三,20;

$stu1-showinfo;

echobr/;

$stu1-testing;

?

从上面可以看出,继承就是一个子类Subclass通过extends父类把父类BaseClass中的public和protected的属性和方法持续下来,不能继承private属性和方法

语法布局:

class父类名

class子类名extends父类名

细节:

1、一个子类只能继承一个父类(这里指直接继承);假设梦想继承多个类的属性和方法,可以使用多层继承

例:

复制代码代码如下:

?php

classA

public$name=AAA;

classBextendsA

public$age=30;

classCextendsB

$p=newC;

echo$p-name;//这里会输出AAA

?

2、在创造某个子类对象时,默认处境下不会自动调用其父类的构造函数

例:

classA

publicfunction__construct

echoA;

classBextendsA

publicfunction__construct

echoB;

$b=newB;//这里会优先输出B中的构造方法,假设B中没有构造方法才会输出A中的

3、在子类中假设需要访问父类的方法(构造方法、成员方法方法的修饰符为protected或private),那么可以使用父类::方法名或者parent::方法名来完成

classA

publicfunctiontest

echoa_test;

PHP面向对象三大特点学习

classBextendsA

publicfunction__construct

//两种方法都行

A::test;

parent::test;

$b=newB;

5、假设一个子类派生类的方法与父类的方法完全一样时public,protected,我们称为方法笼罩或方法重写(override),看下面的多态性

三、多态性

例:

复制代码代码如下:

?php

classAnimal

public$name;

public$price;

functioncry

echoidon\tknow;

classDogextendsAnimal

//笼罩、重写

functioncry

echoWangWang!;

Animal::cry;//这里不会报错,能正确执行父类的cry;

$dog1=newDog;

$dog1-cry;

?

小结:

1、当一个父类知道全体的子类都有一个方法,但是父类不能确定该方法如何写,可以让子类去笼罩它的方法,方法笼罩重写,务必要求子类的方法名和参数个数完全一致

2、假设子类要去调用父类的某个方法protected/public,可以使用父类名::方法名或者parent::方法名

3、在实现方法重写的时候,访问修饰符可以不一样,但是子类方法的访问权限务必大于等于父类方法的访问权限(即不能缩小父类方法的访问权限)

如父类publicfunctioncry子类protectedfunctioncry那么会报错

但是子类的访问权限可以放大,如:

父类privatefunctioncry子类protectedfunc

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论