您好,欢迎访问三七文档
面向对象的概述面向对象的程序的最小单位是:对象面向对象的程序的最小单位是:函数对象可以包含函数对象由两部分组成:成员属性(变量,静态的)和成员方法(函数,动态的);对象是通过类实例化出来的,所有面向对象的编程规则是:先声明类-实例化对象(创建对象)-使用对象。声明类:Class类名{类中成员(成员属性,成员方法);}例如:ClassPerson{public$name;public$age;publicfunctionsay(){return$this-name;}}实例化对象:$变量名=new类名称([参数类表]);例如:$p1=newPerson();对象类型在内存中的分配:内存分为四个部分:栈空间段,堆空间段,数据段和代码段栈:存放对象的地址堆:存放可变长度的数据:字符串,数组和对象数据段:存放初始化变量,全局变量等代码段:存放执行文件的操作指令(函数)对象中的成员访问:赋值:$引用名-成员属性=值;获取:echo$引用名-成员属性。调用成员方法:$引用名-成员方法。$this代表本对象构造方法和析构方法构造方法:是对象创建完成后第一个被对象自动调用的方法析构方法:是对象被销毁前自动调用的方法构造方法的作用:为成员属性初始化。publicfunction__construct([参数列表]){//构造方法方法体;}publicfunction__destruct([参数列表]){//析构方法方法体;}封装性封装性:就是把对象的成员属性和成员方法合成一个独立的相同单位。并尽可能隐蔽对象的内部细节。封装所有的关键词有:public、private、protect。对成员属性封装使用的魔术方法:__set()__get()__isset()__unset()__set():设置私有属性值时自动调用的魔术方法__get():获取私有属性的值的时候调用的魔术方法__isset():在外部直接查看私有属性是否存在时自动调用的魔术方法__unset():删除对象中私有属性时自动调用的方法?php/***CreatedbyPhpStorm.*User:haley*Date:2016/9/18*Time:16:05*//**圆的类*练习魔术方法:__set()__get()__isset()__unset()*/classCircle{private$r;//设置半径为私有的private$aa='aaa';function__construct($r=1){$this-r=$r;}function__set($proname,$value)//__set(){$this-$proname=$value;}function__get($proname)//__get{return$this-$proname;}function__isset($proname)//__isset{returnisset($this-$proname);}function__unset($proname)//__unset{unset($this-$proname);}functionarea(){echo3.14*($this-r)*($this-r);}}$c1=newCircle(5);//实例化一个圆c1,半径为5$c1-area();//输出c1的面积echo'hr';echo$c1-r;//如果类中没有__get()方法,此句不能获取私有属性$r的值$c1-r=6;//如果类中没有__set()方法,此句不能重新设置私有属性$r的值echo'hr';echo$c1-r;//输出对私有属性$r重新设置后的值echo'hr';if(isset($c1-r)){//如果类中没有__isset()方法,此句不能判断私有属性$r对象$c1中是否存在echo'exists';}else{echo'noexists';}echo'hr';unset($c1-aa);//如果类中没有isset(),此句不能删除对象中的私有属性$aaif(isset($c1-aa)){echo'exists';}else{echo'noexists';}继承性类的继承性(扩展性)使所建立的软件具有开放性、可扩充性、增加代码的可重用性、提高软件的可维护性。Php是单继承的父类(基类)---子类(派生类)父类和子类就是一种继承的关系子类可以从父类中继承所有的成员属性和成员方法(除了private类型成员的不能继承)访问类型控制:privateprotectedpublic同一个类中√√√类的子类中√√所有的外部成员√子类中重载父类的方法:子类和声明和父类相同的方法名,即子类覆盖了父类中同名的方法。在子类中也可以改写重载的方法。在类中调用父类的方法用parent::在外部:对象-成员类名::成员注意:如果子类再声明构造方法时,如果父类中已经有了构造方法(子类覆盖),一定要调用一次父类中的构造方法,否则父类中的构造方法就执行不到了,这有有一些功能就不能自动执行。?php/***CreatedbyPhpStorm.*User:haley*Date:2016/9/18*Time:16:34*//**类的继承性练习*子类中重载父类中的方法的练习*类中调用父类的方法用parent::*/classStudent{protected$name;protected$age;protected$sex;function__construct($name,$age,$sex){$this-name=$name;$this-age=$age;$this-sex=$sex;}functionsay(){echo我的名字是:{$this-name},我的年龄是:{$this-age},我的任务是学习。;}}classTeacherextendsStudent{private$course;function__construct($name,$age,$sex,$course){//子类中声明构造方法,一定调用一次父类中构造方法。//类中调用父类的方法用parent::parent::__construct($name,$age,$sex);$this-course=$course;}functionsay(){//方法重载,并且改写了父类中这个方法parent::say();echo我的职务是教师br;}functionteach(){echo我授课的课程名为:{$this-course}。;}}$t1=newTeacher('haley',22,'man','math');$t1-say();$t1-teach();常见的关键字和魔术方法Final关键字可以修饰类和成员方法,不能修饰成员属性和常量使用final修饰的类,不能有扩展(继承)使用final修饰的方法,不能被子类覆盖Static关键字可以修饰成员属性和成员方法静态的成员在同一个类中的所有对象都是公用的静态成员只要类一加载就将静态成员分配到内存的数据里使用static标识的成员属于类的,所以要使用类名访问,不能使用对象取访问在类内部使用self代表本类引用静态方法不能访问非静态的成员如果在方法中使用不到非静态成员,最好声明为静态方法。Const关键字只能修饰成员属性使用const修饰的成员属性属于类的,所有访问方式和静态成员是一样的,都是通过类名或在成员方法中使用self关键字访问。即在类外部使用类名访问,在类内部使用self访问类中声明常量时必须给初值。单例设计模式:类只有一个对象实例:?php/***CreatedbyPhpStorm.*User:haley*Date:2016/9/18*Time:17:16*//**单例模式练习*/finalclassTrangle{private$a;private$b;static$obj;//定义静态成员属性constCONSTS='value';//定义常量function__construct($a=3,$b=1)//设置默认值default{$this-a=$a;$this-b=$b;}publicstaticfunctiongetObj(){//在类中创建对象,且只创建一个对象if(!isset(self::$obj)){//在类中访问静态成员使用self::self::$obj=newself;//如果对象没有创建,则创建}returnself::$obj;//如果对象已创建,则直接返回,达到单例的目的}functionarea(){echo($this-a)*($this-b);}function__destruct(){echo'end';}}$t1=Trangle::getObj();$t1-area();echo'hr';$t2=Trangle::getObj();$t2-area();echo'hr';echoTrangle::CONSTS;echo'hr';Clone魔术方法?php/***CreatedbyPhpStorm.*User:haley*Date:2016/9/18*Time:18:09*/classclon{private$name;private$age;private$sex;function__construct($name,$age,$sex){$this-name=$name;$this-age=$age;$this-sex=$sex;}functionsay(){echo我的姓名:{$this-name}br;}function__clone(){$this-name='haley'.'是'.$this-name.'的副本br';}}$c1=newclon('lzp',22,'man');$c1-say();$c2=clone$c1;$c2-say();__toString()魔术方法它是在直接输出对象引用时自动调用的方法?php/***CreatedbyPhpStorm.*User:haley*Date:2016/9/18*Time:18:21*/classToString{private$name;private$age;private$sex;function__construct($name,$age,$sex){$this-name=$name;$this-age=$age;$this-sex=$sex;}functionsay(){echo我的姓名:{$this-name}br;}function__toString(){echo'正在输出对象引用';}}$s1=newToString('haley',22,'man');echo$s1;__call()魔术方法调用对象中不存在的方法时就会自动调用该魔术方法。__call()需要两个参数:第一个参数:调用不存在的方法时,接受这个不存在的方法的方法名。第二个参数:将不存在fun()方法中的参数传到第二个参数内。?php/***CreatedbyPhpStorm.*User:haley*Date:2016/9/18*Time:18:30*//**__call()魔术方法的练习*调用对象中不存在的方法时自动调用此魔术方法*/classCall{private$name;private$age;private$sex;function__construct($name,$age,$sex){$this-name=$name;$this-age=$age;$this-sex=$sex;}functionsay(){echo我的姓名:{$this-name}br;}function__call($fname,$args){echo你所调用的函数:.$fname.参数:;print_r($args);echo不存在;}}$ca=n
本文标题:php面向对象总结
链接地址:https://www.777doc.com/doc-2850469 .html