php面向对象高级编程_第1页
php面向对象高级编程_第2页
php面向对象高级编程_第3页
php面向对象高级编程_第4页
php面向对象高级编程_第5页
已阅读5页,还剩99页未读 继续免费阅读

下载本文档

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

文档简介

PHP面向对象编程,温振宏,内容介绍:,第1章PHP面向对象程序设计第2章字符串处理函数第3章PHP其他常用函数3.1日期和时间函数3.2图像处理函数3.3文件系统函数,第1章PHP面向对象编程,1.1面向对象概述1.2类的定义、实例化、访问控制1.3构造函数与析构函数1.4面向对象的基本特征:封装、继承与多态1.5抽象类1.6接口,掌握的知识点:,1.类的定义,实例化,访问控制2.构造函数与析构函数3.面向对象的基本特征:封装、继承和多态4.面向对象常用关键字5.抽象类6.接口,1.1面向对象概述,1.计算机语言的发展2.面向对象的基本概念类:表示彼此间有一些关系的对象的集合。对象:客观存在的并具有一定的属性和行为的事物对象的属性:对象本身具有的常量、变量和特性。对象的方法:可以改变自身或对其他对象产生作用和影响的行为和手段。类和对象的关系:类的实例化的结果是对象。,1.2类的定义,classPersonvar$name=lucy;var$age=24;var$sex=女;functionwalk()-,类的成员,练习1:定义Person类(P8),成员属性:name,age,sex成员方法:say(),run(),练习2:定义Phone类,成员属性:manufactures,color,battery_capacity,screen_size成员方法:call(),message(),playMusic(),photo(),练习3:定义Computer类,成员属性:brand,type,size成员方法:input(),display(),output(),格式:$varName=newclassName(par,par2,-);实例:ClassPerson$person1=newPerson();$person2=newPerson();=ClassPhone$phone1=newPhone();$phone2=newPhone();=,类的实例化:new关键字,类的实例化:$this关键字,classstudentvar$name;var$age;var$sex;functiongetInfo()echo姓名:.$this-name.”;echo年龄:.$this-age.”;echo性别:.$this-sex.”;,$stu1=newstudent();$stu1-name=张三丰;$stu1-age=25;$stu1-sex=男;$stu1-getInfo();,1.$this代表当前对象的引用2.对象访问类中属性或方法:-,练习3:定义Person类,成员属性:name,sex,age成员方法:say(),run()实例化对象:$person1,$person2,$person3,1.定义类用()关键字,定义没有成员的MyClass类:()。2.实例化对象用()关键字,针对MyClass类实例化对象myClass1:()。3.关键字(),代表当前对象的引用。,练习4:定义Circle类,成员属性:$r,$pi成员方法:getArea(),getperimetor()实例化对象:$c1,$c2,功能:计算不同圆形的面积和周长,1.3构造方法和析构方法,1.构造方法:是类中的一种特殊方法。特点:构造方法必须命名为_construct();构造方法在类实例化时自动调用;构造方法没有返回值;作用:通常用于类的初始化;,classStudentvar$name;var$age;var$sex;function_construct($name,$age,$sex)$this-name=$name;$this-age=$age;$this-sex=$sex;functiongetInfo()echo学生姓名:.$this-name.;echo学生年龄:.$this-age.echo学生性别:.$this-sex.;$stu1=newStudent(张三丰,25,男);$stu1-getInfo();,2.析构方法:是与构造方法相对应的另一个特殊方法。特点:析构方法必须命名为_destruct();析构方法没有参数;析构方法没有返回值;析构方法在对象被销毁是自动调用。作用:销毁对象,释放内存。,classstudentvar$name;var$age;var$sex;function_construct($name,$age,$sex)$this-name=$name;$this-age=$age;$this-sex=$sex;functiongetInfo()echo学生姓名:.$this-name.;echo学生年龄:.$this-age.echo学生性别:.$this-sex.;function_destruct()$stu1=newstudent(张三丰,25,男);$stu1-getInfo();,作业1:P18,1.定义Person类成员属性:name,sex,age成员方法:say(),run()特殊方法:构造方法,析构方法2.实例化对象$person1=newPerson(张良,男,20);$person2=newPerson(黎明,男,30);$person1-say();$person1-run();$person2-say();$person1-run();,1.4面向对象的基本特征,基本特征:封装、继承和多态1.封装:即把客观事物封装成类,并且类中的数据和方法可以只让可信的类或者对象操作,对不可信的类或者对象进行信息隐藏。2.继承:使用现有类的所有功能(private属性和方法除外)。php中通过extends关键字实现继承。通过继承创建的类称为“子类”或“派生类”;被继承的类称为“基类”、“父类”或“超类”;继承的过程就是从一般到特殊的过程。3.多态:父类引用指向子类对象。,1.封装性,封装性:就是把对象的成员属性和成员方法结合成一个独立的相同单位(即类),并尽可能的隐蔽类的内部细节。把对象的全部成员属性和成员方法结合在一起,形成一个不可分割的独立单位(即类)。信息隐蔽,即尽可能的隐蔽类的内部细节,只保留有限的接口与外部发生联系。,访问控制修饰符,Public:访问没有限制(var)Protected:只有类的内部和子类内部可以访问Private:只有类的内部可以访问,1.面向对象的三大特征:()()()。2.PHP中的访问控制修饰符有:()()()。3.继承是通过()关键字实现的。例如Worker类继承Person类,()。4.PHP不支持多继承,即一个子类只能有一个父类。5.防止类被继承,防止方法被覆盖,需用()关键字。,ClassMyClassPrivate$pro1=100;PrivatefunctionprintHello()EchoHello.”n”;$obj1=newMyClass();Echo$obj-pro1;$obj-printHello();,Private修饰的属性和方法,classPersonprivate$age;function_construct($a)$this-age=$a;functiongetInfo()echo年龄:.$this-age.;$this-work().;functionsetAge($age1)if($age1150)returnfalse;else$this-age=$age1;functiongetAge()echo$this-age;privatefunctionwork()echowork;,$p1=newPerson(25);/echo$p1-age.”n”;$p1-getInfo();$p1-setAge(50);$p1-getAge();/$p1-work();$p1-getInfo();,2.继承性,使用extends关键字实现继承。子类可以使用父类(private修饰的属性和方法除外)的所有属性和方法。PHP不支持多继承,即只能有一个父类。可以使用final关键字防止被继承。,classPersonvar$name;/为简化继承用var修饰var$sex;var$age;function_construct($_name,$_sex,$_age)$this-name=$_name;$this-sex=$_sex;$this-age=$_age;functiongetInfo()echo“姓名:”.$this-name.”n”;echo“性别:”.$this-sex.”n”;echo“年龄:”.$this-age.”n”;function_destruct()echo$this-name.再见!.”;,1.定义父类Person,classStudentextendsPersonvar$school;functionstudy()echo我在.$this-school.学习;$stu1=newStudent(张丹丹,女,28);$stu1-getInfo();$stu1-school=中山大学;$stu1-study();,2.定义子类Student,Classfoo1Classfoo2Classson1extendsfoo1Classson1extendsfoo2-Classfoo1Classson1extendsfoo1Classson2extendsfoo1-ClassMyClass1ClassMyClass2extendsMyClass1ClassMyClass3extendsMyClass2,FinalclassMyClassvar$pro1=final:;functionfun1()echofinal实例;$c1=newMyClass();$c1-pro1;$c1-fun1();-ClassMyClass1extendsMyClass,PHP不支持多继承,Final修饰的类不能被继承,ClassMyClassPrivate$pro1=100;PrivatefunctionprintHello()EchoHello.”n”;ClassMyClass1extendsMyClassFunctionTest()Echo输出父类的成员属性.$this-pro1;Echo“n”;$this-printHello();$obj1=newMyClass1();$obj1-Test();,Private修饰的属性和方法,ClassMyClassProtected$pro1=100;ProtectedfunctionprintHello()Echo”hello!n”;ClassMyClass1extendsMyClassFunctionTest()echo访问父类protected修饰的属性和方法:.$this-pro.”n”;$this-printHello();$obj1=newMyClass1();Echo$obj1-pro1;/类外部不能访问protected修饰的属性$obj1-printHello();/类外部不能访问protected修饰的方法$obj1-Test();/子类内部访问父类protected修饰的属性和方法,Protected修饰的属性和方法,覆盖与重载,子类方法权限必须不能低于父类方法权限。父类方法是public,子类方法必须是public;父类方法是protected,子类方法必须是protectedorpublic;父类方法是private,子类方法可以是public,protected,private。,方法覆盖:函数名相同,参数相同方法重载:函数名相同,参数不同,classPersonpublic$name;protected$age;protected$sex;function_construct($n,$a,$sex)$this-name=$n;$this-age=$a;$this-sex=$sex;functiongetInfo()echo姓名:.$this-name.;echo年龄:.$this-age.;echo性别:.$this-sex.;,覆盖与重载实例:,classStudentextendsPersonprivate$school;function_construct($n,$a,$sex,$school)$this-name=$n;$this-age=$a;$this-sex=$sex;$this-school=$school;functiongetInfo()echo姓名:.$this-name.;echo年龄:.$this-age.;echo性别:.$this-sex.;echo学校:.$this-school.;$stu1=newStudent(刘亦菲,22,女,清华大学);$stu1-getInfo();,常用关键字,Final:只能用来定义类和成员方法。用final修饰的类不能被继承。用final修饰的方法不能被覆盖。Static:只能修饰成员属性和成员方法static修饰成员属性,不能用对象访问,需用类名:成员属性访问。static修饰成员方法,使用类名:方法名访问,也可使用对象来访问(不提倡)。用static声明的方法里不能使用非static成员(ex:$this-name)。Const:只修饰成员属性,声明时赋初值,需类名:成员属性访问。Self:代表类本身,引用类中的静态变量或类常量。Parent:代表父类的引用。:引用父类成员、引用静态成员或引用类常量。,FinalclassFooClassSon1extendsFoo-ClassFooVar$pro1=100;FinalfunctionSay()echo这是父类中final修饰的方法!;ClassSon1extendsFooVar$pro2=200;/FunctionSay()echo覆盖父类中final修饰的Say();FunctionTest()/$this-Say();parent:Say();$s1=newSon1();/$s1-Say();$s1-Test();,classCirclestatic$r;constPI=3.14;function_construct($r)_;staticfunctiongetArea()echo该圆的半径是._;echon;echo该圆的面积是:._;$c1=newCircle(10);echo圆周率是:._;echon;echo_getArea();,classPersonprivate$name;private$age;private$sex;function_construct($n,$a,$sex)$this-name=$n;$this-age=$a;$this-sex=$sex;functiongetInfo()echo姓名:.$this-name.;echo年龄:.$this-age.;echo性别:.$this-sex.;,作业2:继承,classStudentextendsPersonprivate$school;function_construct($n,$a,$sex,$school)_;$this-school=$school;functiongetInfo()_;echo学校:.$this-school.;$stu1=newStudent(刘亦菲,22,女,清华大学);$stu1-getInfo();$stu2=newStudent(张宏良,25男,中央民族大学);$stu2-getInfo();,3.多态性(作业3),classAnimalprivate$name;function_construct($name)$this-name=$name;functiongetName()echo$this-name;functionechoVoice()echo动物会叫;,多态的作用?,classBirdextendsAnimalfunctionechoVoice()echo-会唱歌!;classDogextendsAnimalfunctionechoVoice()echo-在旺旺地叫;-,classGirlprivate$girlName;function_construct($girlName)$this-girlName;functiongetGirlName()echo$this-girlName;functionfeedPet($pet)$pet-getName();$pet-echoVoice();,$b1=newBird(百灵鸟);$d1=newDog(牧羊犬);$g1=newGirl(张颖);$g1-getGirlName();$g1-feedPet($b1);echon;$g1-feedPet($d1);,1.5抽象类和抽象方法,抽象方法没有方法体的方法就是抽象方法。即没有及内容。抽象方法需用abstract关键字声明。抽象类类里如果有一个方法是抽象的,这个类就是抽象类。抽象类需用abstract关键字来修饰。抽象类不可以实例化对象,但可以继承,因此可以通过子类实例化对象。在抽象类中,声明方法名为getArea的抽象方法:()。,abstractclassShapeprivate$shape;function_construct($shape)$this-shape=$shape;functiongetShape()return$this-shape;abstractfunctiongetArea();,classCircleextendsShapeprivate$r;constPI=3.14;function_construct($s=,$r)parent:_construct($s);$this-r=$r;functiongetArea()echo半径为.$this-r.的.$this-getShape();echo面积是:.self:PI*$this-r*$this-r;$c1=newCircle(圆形,10);$c1-getShape();$c1-getArea();-,抽象类作用?,已定义好Shape抽象类,定义子类:圆形、正方形、三角形,分别计算面积和周长。,作业4:抽象类,abstractclassShapeprivate$shape;function_construct($shape)$this-shape=$shape;functiongetShape()return$this-shape;abstractfunctiongetArea();/面积abstractfunctiongetPerimeter();/周长,公式描述:公式中S为三角形面积,a、b、c分别为三角形边长,p为(a+b+c)/2。,常用的图形面积公式,1.三角形,2.梯形,S=(a+b)h/2,公式说明:a、b是上底和下底,c、d是两腰,h是高。,1.6接口,classDemo可以有成员属性可以有普通方法-abstractclassDemo(可以有成员属性可以有普通方法至少有一个抽象方法),interfaceDemo所有的成员属性必须是常量所有的方法都是抽象的所有的成员必须是public修饰1.Interface定义接口。2.接口中只能有常量和抽象方法。3.接口不能实例化对象,只能通过类来实例化对象,用implements实现接口4.所有的方法必须被实现5.一个类可以实现多个接口,接口中所有方法都是抽象的,故不必加abstract关键字。接口中所有方法都是public修饰,故可省略public。InterfaceOneConstPI=3.14;Functionfun1();Functionfun2();接口可以继承InterfaceTwoextendsOneFunctionfun3();Functionfun4();,类demo通过Implements关键字实现接口ClassdemoimplementsOneFunctionfun1()echo1111111.”n”;Functionfun2()echo222222”n”;$d1=newDemo();Echo输出接口中的常量:.demo:PI.”n”;/类名:常量$d1-fun1();$d1-fun2();,一个类还可以实现多个接口ImplementsThreeFunctionfun5();ClassTest1implementsTwo,Three_;$t1=newTest1();,一个类还可以先继承后实现接口InterfaceFourFunctionfun5();ClassTest2extendsDemoimplementsFour_;$t2=newTest2();,InterfaceAreafunctiongetArea();InterfacePerimeterfunctiongetPerimeter();/定义Triangle类实现Area,Perimeter接口/功能:计算三角形面积和周长ClassTriangleimplementsArea,Perimeter,作业5:接口,第2章字符串处理函数,2.1去除空格函数2.2单词处理函数2.3字符串查找替换函数2.4字符串截取函数2.5字符串分隔函数2.6比较函数2.7其他函数,trim():去除字符串左右两端空格。ltrim():去除字符串左端空格。rtrim():去除字符串右端空格。strlen():获取字符串长度。,$str=wearestudyingphp;echostrlen($str);echostrlen(rtrim($str);,2.1去除空格函数:,ucwords():字符串中每个单词首字母大写。ucfirst():字符串首字母大写。strtoupper():全部字母变成大写。strtolower():全部字母变成小写。,2.2单词处理函数:,intsubstr_count(str1,str2,start,length):统计str2在str1中出现的次数,start(默认从0开始)和length是起点和长度。str_word_count():统计字符串中的单词个数。,$big=“thisisanexampleofcountingstring!”;$cnt=substr_count($big,is);$cnt_w=str_word_count($big);echo$cnt.;echo$cnt_w;,1)str_replace(search,replace,subject):subject:源字符串;search:查找的字符串;replace:替换字符串。2)substr_replace(old-string,new-string,start,length):在old-string中插入从start开始length长度的new-string.,$old=Ilikemusicverymuch;echostr_replace(music,swimming,$old).;echosubstr_replace($old,dancing,7,8).;,2.3字符串查找替换函数:,3)strpos(str1,str2):查找str2在str1中第一次出现的位置4)strrpos(str1,str2):查找str2在str1中最后出现的位置。5)strstr(str1,str2):查找str2在str1中第一次出现的位置,并返回后面的字符串。6)strrchr(str1,str2):查找str2在str1中最后一次出现的位置,并返回后面的字符串。,$str1=PHPissimple,andPHPisfun!;echostrpos($str1,PHP).;/第一次出现位置echostrrpos($str1,PHP).;/最后一次出现位置echostrstr($str1,PHP).;/第一次出现PHP后的字符串echostrrchr($str1,PHP).;/最后出现PHP后的字符串,substr(string,intstart,intlength)本函数返回string字符串中从start位置开始length长度的字串。,$str=you,heandIlikemusicverymuch;echosubstr($str,11);,2.4字符串截取函数,1)explode()andimplode()函数explode()将字符串拆成数组元素implode()将数组元素连成字符串2)str_split(stringstring,intsplit_length)按指定长度分隔string。,$str1=linuxapachemysqlphp;$arr1=explode(,$str);/将字符串拆成数组元素foreach($arras$k=$v)echo“$arr$k=”.$v.;echoimplode(,$arr);/将数组元素连成字符串$arr2=str_split($str1,6);/分隔成数组元素,2.5字符串分隔函数,1)strcmp(stringstr1,stringstr2)比较str1andstr2大小,返回结果为0;=0;0)echophp1php2;elseif(strcmp(php1,php2)=0)echophp1=php2;elseechophp116进制for($i=0;$i4;$i+)$yzm.=dechex(rand(0,15);$_SESSIONyzh=$yzm;,1.showImage.php,$imageCreate=imagecreate(60,20);/创建画布imagecolorallocate($imageCreate,120,180,150);/添加背景色$black=imagecolorallocate($imageCreate,0,0,0);/颜色描述符for($i=0;$i位来访者!,第4章动态技术,4.1$_POSTAND$_GET4.2$_COOKIEAND$_SESSION4.3$_SERVER4.4$_FILES,4.1$_POSTand$_GET,1.相同点:接收网页中传递的数据。2.不同点:$_POST接收post方式传递的数据,数据量大,安全性高。$_GET接收get方式传递的URL后面的数据,数据量小,安全性差。$_REQUEST无论是post方式,还是get方式都能接收。,实例1:注册表单提交,4.2$_COOKIEand$_SESSION,1.CookieCookie是一种在客户端存储数据并以此来跟踪和识别用户的机制。当浏览某网站时,Cookie可以记录用户ID、密码、浏览过的网页、停留的时间等信息。当在次来到该网站时,网站通过读取Cookies,得知你的相关信息,就可以做出相应的动作,如在页面显示欢迎你的标语,或者让你不用输入ID、密码就可以直接登录。,设置CookieSetCookie(stringname,stringvalue,intexpire,stringpath,stringdomain,intsecure);除了name外,其他参数都是可选的,value,path,domain参数可以用空字符串代替。Expire失效时间,是一个标准的Unix时间戳。Secure取值0,1。表示该Cookie是否通过加密的HTTPS协议在网络中传输。SetCookie(“MyCookie”,”valueofMyCookie”);SetCookie(“MyCookie”,”WithExpireofCookie”,time()+3600);SetCookie(“CookieName”,”CookieValue”,time()+3600,”/path”,1);注意:SetCookie()必须在HTML文件的内容输出之前设置。,练习:SetCookie,c1.php页面c2.php查看cookie设置是否成功!”;?c2.php页面,实例2:欢迎标语,1.login.html,if(isset($_COOKIEname)echo“welcome”.$_COOKIEname;elsesetcookie(name,$_POSTuname,time()+60);setcookie(pass,$_POSTupass,time()+60);echo“cookie设置成功,请到logout.php页面检测!”;,2.login.php,if(isset($_COOKIEname)echo$_COOKIEname.你好!欢迎访问该网站;elseheader(“location:login.html”);/php中的页面自动跳转函数,3.logout.php,2.sessionSession中文译名“会话”,通常指进入系统到注销退出系统之间所经过的时间

温馨提示

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

评论

0/150

提交评论