您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > PHP面向对象编程设计
PHP面向对象的编程设计类与对象的基本概念如何抽象一个类通过类实例化对象静态变量(类变量)和静态方法(类方法):封装性继承性常见的关键字和魔术方法抽象类于接口多态性的应用类与对象的基本概念什么是类:在面向对象的编程语言中,类是一个独立的程序单位,具有相同属性和服务的一组对象的集合。它为属于该类的所有对象提供了统一的抽象描述,其内部包括成员属性和服务的方法两个主要部分。什么是对象:对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。类和对象的关系把猫的特性提取出来猫类对象(实例)对象(实例)对象(实例)类与对象的基本概念入门案例:创建一个猫类。?phpClasscat{Public$name;Public$age;Public$color;}?创建一只猫(通过一个cat类创建一个cat对象)$cat1=newcat();$cat1-name=“小白”;$cat1-age=3;$cat1-color=“白色”;$cat2=newcat();……………………类与对象的基本概念注意:从猫类到对象目前有几种说法:1、创建一个对象2、实例化一个对象3、把类实例化通过上面的案例和讲解我们可以看出:(1)类是抽象的,概念的,代表一类实物,比如人类(2)对象是具体的,实际的,代表一个具体实物(3)类是对象的模板,对象是类的一个个实例。类与对象的基本概念成员属性的说明:1、成员属性是从某个实物提取出的,它可以是基本数据类型(整数、小数、字符、布尔),也可以是复合数据类型(数组、对象)Class类名{成员属性(变量);Public$name;Public$age;}这里的public是一个关键字,目前先认为$name属性是公开的,可以任意访问。类的声明和成员属性类的属性如果赋初值,只能是一个直接的值,不能是函数的返回值,或是表达式返回值。如何创建对象:$对象名=new类名();$对象名=new类名;如何访问(使用)对象的属性$对象名-属性名;$cat1-name=“小明”//给某个对象赋值。如何抽象一个类——创建对象2、怎样访问一个成员属性(前提是成员属性是public)基本语法:$对象名-属性名;如果一个文件,专门用于定义类的,则命名规范应当是类名.class.php一个小思考题:$a=newperson;$a-name=“小明”;$b=$a;echo$a-name.”br/”;echo$b-name.”br/”;结论:PHP中的对象是按引用传递的,即每个包含对象的变量都持有对象的引用,而不是整个对象的拷贝。如何抽象一个类——对象中成员的访问思考:$b-age=890则echo$a-age;echo$b-age;对象在内存中的分配地址空间对象在内存中的分配函数和成员方法关系:当我们把一个函数写到某个类中,则该函数可以称为成员方法。我们有这样一个需求:希望人可以说话,做算术题等等。如:(1)添加speak成员方法,输出我是一个好人(2)添加jisuan成员方法,该方法可以接收一个数N,计算1+n的结果。(3)…………访问修饰符是function函数名(参数列表){//函数体//return语句;}如何抽象一个类——成员方法成员方法细节:(1)方法的参数列表可以是多个,举例判断多个数(数组)最大的数。(2)方法可以没有返回值?phpRequire_once‘persion.class.php’;$p1=newperson();//调用$p1的各种方法。案例:编写一个函数(以面向对象的方式开发),从网页输入一个整数(金字塔层数)打印出对应的金字塔:小结:1.先设计类2.然后根据类创建对象。如何抽象一个类——成员方法传统成员方法:Classperson{Public$name;Public$age}$p1=newperson();$p1-name=“孙悟空”;$p1-age=500;构造方法和析构方法是对象中的两个特殊方法,构造方法是对象创建完成后第一个被对象自动调用的方法,通常使用构造方法完成一些对象的初始化,构造方法和析构方法在创建一个人对象时候,就初始化name和aga,需要构造方法。快速入门:Classperson{Public$name;Public$agePublicfuntion__construct($iname,$iage){$this-name=$iname,$this-age=$iageecho“我是构造方法”;}}$p1=newpersion(“李晓光”,67);echo“hello”.$p1-name;构造方法和析构方法构造方法特点:1、没有返回值,它是自动调用。2、在PHP5中一个类可以同时有两种形式的构造方法__construct()和类名(),当两个同时存在的时候,优先调用__construct(),请大家以后使用__construct()。什么是this系统会给每个对象分配this代表当前对象,$this-属性名。(1)$this可以理解成就是对象本身在堆区的地址,(2)哪个对象使用到$this,就是哪个对象的地址。(3)this不能在类的外部使用,只能在类定义的方法中使用。构造方法和析构方法构造方法注意事项:(1)一旦自定义了一个构造函数,默认的构造函数就被覆盖了,这时在创建对象的时候就要使用自定义的构造函数。(2)一个类只能有一个构造函数(不能重载)(3)注意作用是完成对新对象的初始化,并不是创建对象本身(4)在创建对象后,系统自动调用该类的构造方法。(5)一个类有且只有一个构造方法,在PHP5后虽然__construct()和类名()可以共存,但是实际上页只能使用一个。(6)如果没有给类自定义构造方法,则该类使用系统默认的构造方法(7)构造方法的默认访问修饰符是public若$p3=newcat()会报错。构造方法和析构方法析构方法:作用主要用于释放资源(比如释放数据库的链接,图片资源,销毁某个对象)Classperson{Public$name;Public$agePublicfuntion__construct($iname,$iage){$this-name=$iname,$this-age=$iage}Function__destruct(){Echo$this-name.”销毁资源br/”;}}构造方法和析构方法$p1=newperson(“小龙”,45);$p1=NULL;$p1=newperson(“李明”,15);$p1=newperson(“小路”,23);运行代码我们得出:(1)析构方法会自动调用(2)析构方法主要用于销毁资源(3)析构方法调用顺序是,先创建的对象后销毁通过类实例化对象——构造方法和析构方法析构方法什么时候被调用:(1)当程序进程结束退出时(2)当一个对象称为垃圾对象的时候,该对象析构方法也会被调用(3)所谓垃圾对象,就是指没有任何变量再引用它。(4)一旦一个对象成为垃圾对象,析构方法就会立即调用。小结:(1)php5加入的析构方法function__destruct()(2)析构方法没有返回值。(3)主要作用是释放资源的操作,并不是销毁对象本身。(4)再销毁对象前系统自动调用该类的析构方法(5)一个类最多只有一个析构方法。注意:在PHP中析构方法并不是很常用,它属于类中可选的一部分,只有需要的时候才再类中声明。通过类实例化对象——构造方法和析构方法在php中如何销毁一个对象?(1)显式销毁:例如$obj=null;unset($obj);(2)隐式销毁:php脚本是解释型语言,按顺序一行一行来执行,当页面执行完毕,页面中所有产生的变量自动销毁。通过类实例化对象——构造方法和析构方法同一个类,在一个php文件运行过程中,声明几次?同一个类,在一个php文件运行过程中,可以实例化成多少个对象。面向对象与构造函数,析构函数小节:静态变量(类变量)和静态方法(类方法):Class/Object:类(class)和对象(object)是面向对象方法的核心概念。类是对一类事物共性的总结,描述.是抽象的、概念上的定义;比如:人类{1颗头,2支胳膊,2条腿,每个人有自己的身高,体重有自己的名字皮肤颜色黑白黄,会哭}对象是实际存在的该类事物的每个个体,因而也称实例(instance)。比如:李开复,唐骏,奥巴马所有的对象都共享的一个变量.类的静态属性是指,属于类,而不属于具体对象的属性。不管类有没有实例化,有0个对象,还是有n个对象,静态变量都存在,且只存在一个。静态变量(类变量)和静态方法(类方法):classhuman{publicstatic$head=1;public$name;public$height;publicfunction__construct($name,$height){$this-name=$name;$this-height=$height;}}$zhang=newhuman('张山',170);$wang=newhuman('王华',160);//我们可以看出,两个height不同//有多少个对象,就有多少个height属性,在内存就有多少分height的空间。静态变量的基本用法:(1)在类中定义静态变量【访问修饰符】static$变量名(2)如何访问静态变量如果在类中访问有两种方法:Self::$静态变量名类名::$静态变量名如果在类外访问:有一种方法类名::$静态变量名静态变量(类变量)和静态方法(类方法):$this与静态属性,静态方法的区别:$this-是指对象自己,必须有实例化之后的对象中使用。在静态方法中,是不能够含有$this的引用的。问题:如果类内部用类名::属性,来访问本类的属性或方法,当类名改变时,内部的引入的类名,都要改。解决:如果在类内部,不是用类名来引用,而是用“本类”来引用,就不会产生问题。静态变量(类变量)和静态方法(类方法):思考:说有一群小孩再玩游戏,不断有新的小孩加入,如何知道现在有多少人在玩,如何使用面向对象的思想编程解决。思路(1)使用全局变量,在程序中,都可以使用的变量。?phpGlobal$global_nums;//定义全局变量$global_nums=0;Classchild{Public$name;Function__construct($name){$this-name=$name;}静态变量(类变量)和静态方法(类方法):Publicfunctionjoin_game(){Global$global_nums;//声明一下使用全局变量$global_nums+=1;echo$this-name.”加入游戏”;}}$child1=newchild(“李龙”);$child1-join_game();echo“br/有”.$global_nums;静态变量(类变量)和静态方法(类方法):思路(2)使用静态变量?phpClasschild{Public$name;Publicstatic$nums=0;//这里定义并初始化一个静态变量Function__construct($name){$this-name=$name;}Publicfunctionjoin_game(){Self::$name+=1;//使用静态变量;Echo$this-name.”加入游戏”;}}静态变量(类变量)和静态方法(类方法):创建几个小孩:$Child1=newchild(“刘备”);$child1-join_game();Echo“有多少人在玩游戏:”.child::$nums;静态变量在内存中存在形式如图:静态变量(类变量)和静态方法(类方法):静态方法:需求:当我们操作静态变量的时候,我们可以考虑使用静态方法,比如统计所有的学生交得学费。在我们编程中,我们往往使用静态方法去操作静态变量.静态方法特点:(1)静态方法去操作静态变量(2)静态方法不能操作非静态变量注意:普通的成员方法,即可以操作非静态
本文标题:PHP面向对象编程设计
链接地址:https://www.777doc.com/doc-5271264 .html