您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 传智播客 韩顺平 php从入门到精通 61-78讲面向对象课堂笔记
php面向对象编程提出一个问题?张老太养了两只猫猫:一只名字叫小白,今年3岁,白色。还有一只叫小花,今年100岁,花色。请编写一个程序,当用户输入小猫的名字时,就显示该猫的名字,年龄,颜色。如果用户输入的小猫名错误,则显示张老太没有这只猫猫。数组---对象array(1,56,90,100)-隐藏问题array(对象,对象。。。)【数组对象】首先我们用现有的知识来完成这个案例:?php$cat1_name=”小白”;$cat1_age=3;$cat1_color=”白色”;//变量是分开.$cat2_name=”小花”;$cat2_age=100;$cat2_color=”花色”;?我们能不能把属于同一事物的变量,统一管理?解决之道-对象快速体验案例:?php//这就是一个类(猫类)classCat{//属性public$name;public$age;public$color;}//创建一只猫$cat1=newCat();//给这只猫赋值.(具体各个)$cat1-name=小白;$cat1-age=3;$cat1-color=白色;$cat2=newCat();$cat2-name=小花;$cat2-age=100;$cat2-color=颜色;//如果我们找到一只猫,只要找到$cat1,那么该变量所有相关的属性都通通的找到$findCatName=小花;if($cat2-name==$findCatName){echo$cat2-name.||.$cat2-age.||.$cat2-color;}?我们这里说明一下类和对象的关系(细节后面逐步展开)总结几句话:①类是抽象的,代表一类事物②对象是具体,是类的一个具体实例③类是对象的模板,对象是类的一个个体实例php面向对象编程成员属性的说明1.成员属性是从某个事物提取出的,它可以是基本数据类型(整数、小数、字符、布尔),也可以是复合数据类型(数组、对象)?phpclassCat{public$name;public$age;}//创建对象$cat1=newCat;$cat1=newCat();?2.怎样访问一个成员属性(其它成员属性是public)基本语法是$对象名-属性名;☞如果一个文件,专门用于定义类,则命名规范应当这样类名.class.php分析对象在内存中存在的形式//定义一个人类classPerson{public$name;public$age;}$a=newPerson();$a-name=小明;$a-age=20;//把a变量(对象),赋给$b$b=$a;echo$a-name.br/;echo$b-name.br/;再次说明:$a=78;//$b=$a;$b=&$a;$b=$b+8;echo$a.||.$b;如果给一个函数传递一个对象,实际上是传递的一个地址.//看下面的一段代码:classPerson{public$name;public$age;}$p1=newPerson();$p1-name=韩顺平;$p1-age=33;//函数接收对象时候,究竟是传入值,还是地址(!!!!)functiontest1($p){$p-name=小明;}test1($p1);echo$p1-name;分析图如果给函数传递的是基本数据类型(整数、小数、布尔、字符),究竟传递的是什么?结论:在默认的情况下是传递的值,如果你希望传入地址functiontest(&$变量....){}在php中如果,给一个函数传递的是数组,则默认情况下是传值(拷贝了新的数组),如果希望传入地址,则应当,&$数组名学生问题??php$a1=array(1,3,900);$a2=array(56,90,100);$arr=array($a1,$a2);foreach($arras$k=$v){echo“$k=$v”;}?成员方法的讲解函数和成员方法关系:当我们把一个函数写到某个类中,则该函数可以称成员方法:我们有这样一个需求;希望人可以说话,做算术题.......,这样就需要使用到成员方法:①添加speak成员方法,输出我是一个好人②添加jisuan成员方法,可以计算从1+..+1000的结果③修改jisuan成员方法,该方法可以接收一个数n,计算1+..+n的结果④添加add成员方法,可以计算两个数的和成员方法的基本语法:访问修饰符号function函数名(参数列表){//函数体//return语句;}?phpclassPerson{public$name;public$age;publicfunctionspeak(){echo我是一个好人!;}publicfunctioncount1(){$res=0;for($i=1;$i=1000;$i++){$res+=$i;}//return究竟到什么地方去?谁调用,就返回给谁return$res;}//修改jisuan成员方法,该方法可以接收一个数n,计算1+..+n的结果publicfunctioncount2($n){$res=0;for($i=0;$i=$n;$i++){$res+=$i;}return$res;}//添加add成员方法,可以计算两个数的和publicfunctionadd($num1,$num2){return$num1+$num2;}}//如何使用函数//1.创建一个人$p1=newPerson();//通过对象去访问,调用成员方法.//这里强调,调用成员方法和调用普通函数的机制,仍然不变$p1-speak();//让这个人做算术题$res=$p1-count1();echo'计算结果是='.$res;//让这个人可以接收一个数,然后计算echo计算结果是=.$p1-count2(100);echo计算结果是=.$p1-count2(100);echo计算结果是=.$p1-count2(100);echo23+89=.$p1-add(23,89);?成员方法的细节我们在实际开发,其实通常是这样来使用类Person.class.php?phpclassPerson{//成员属性public$name;public$age;//成员方法publicfunctionspeak(){echo我是一个好人!;}publicfunctioncount1(){$res=0;for($i=1;$i=1000;$i++){$res+=$i;}//return究竟到什么地方去?谁调用,就返回给谁return$res;}//修改jisuan成员方法,该方法可以接收一个数n,计算1+..+n的结果publicfunctioncount2($n){$res=0;for($i=0;$i=$n;$i++){$res+=$i;}return$res;}//添加add成员方法,可以计算两个数的和publicfunctionadd($num1,$num2){return$num1+$num2;}//添加一个新的方法,可以判断三个数最大的数publicfunctionfindMax($arr){//这里仍然可以写算法//从$arr数组中,找到最大的数.//1.假设数组的第一个数就是最大的数$maxVal=$arr[0];//2.最大数的下标是$maxIndex=0;//开始循环的比较for($i=1;$icount($arr);$i++){//这个条件说明,maxVal不是最大if($maxVal$arr[$i]){//调整$maxVal=$arr[$i];$maxIndex=$i;}}return$maxVal;}}?Exercise01.php?php//引入类文件require_once‘Person.class.php’;//创建对象$p1=newPerson();//调用$p1的各个方法$p1-speack();$p1-count1();..?案例:编写一个函数(以面向对象的方式开发),从网页输入一个整数打印出对应的金子塔:当我们学习完成员方法后,我们的类定义就完善一步了:1.设计计算机类,要求如下:属性:品牌,颜色,cpu型号,内存容量,硬盘大小,价格,工作状态方法:打开,关闭,休眠(表示)创建一个计算机对象,调用打开,关闭方法.php面向对象编程构造方法classPerson{public$name;public$age;}$p1=newPerson();//再给属性赋值$p1-name=”宋江”;$p1-age=33;//需求在创建一个人对象时候,我就初始化name和age;-构造方法我们快速入门:classPerson{public$name;public$age;publicfunction__construct(){echo“我是构造方法”;}//业务代码要放在成员方法publicfunctionfindPerson(){}}$p1=newPerson();☞构造方法没有返回值,它是自动被调用2.在php5中一个类可以同时有两种形式的构造方法__construct()和类名(),当两个同时存在的时候,优先调用__construct(),请大家以后使用__construct()this的理解classPerson{public$name;public$age;//这个就是构造方法,php5独有publicfunction__construct($iname,$iage){//$name认为$name是一个新的变量//$name=$iname;//$age=$iage;$this-name=$iname;$this-age=$iage;echo我是构造方法;}}$p1=newPerson(张清,90);echohello-.$p1-name;$p2=newPerson(宋江,33);echoaa-.$p2-name;$this理解图:☞1.$this本质可以理解就是这个对象的地址2.哪个对象使用到$this,就是哪个对象地址3.$this不能在类外部使用.构造方法的注意事项(1)一旦自定义了一个构造函数,默认的构造函数就被覆盖了,这时在创建对象的时候就要使用自定义的构造函数.(2)一个类只能有一个构造函数.(不能重载)构造方法的8点说明:①构造方法名和类名相同(php4版),php5版的构造方法名可以和类名相同,也可以是__construct()②构造方法没有返回值③主要作用是完成对新对象的初始化,并不是创建对象本身。④在创建新对象后,系统自动的调用该类的构造方法⑤一个类有且只有一个构造方法,在php5后虽然__construct()和类名()可以共存,但是实际上也只能使用一个。⑥如果没有给类自定义构造方法,则该类使用系统默认的构造方法。classCat{funciton__construt($name){echo“ok”;}}$cat1=newCat();⑦如果给类自定义了构造方法,则该类的默认构造方法被覆盖。⑧构造方法的默认访问修饰符是public析构方法析构方法的作用主要用于,释放资源(比如释放数据库的链接,图片资源...销毁某个对象..)快速入门?phpclassPerson{public$name;public$age;public$conn;//构造方法publicfunction__construct($name,$age){$this-name=$name;$this-age=$age;//打开一个$conn链接数据库的资源}//写一个析构方法__是两个下划线function__destruct(){echo$this-name.销毁资源关闭数据库..br/;}}$p1=newPerson(贾宝玉,16);$p2=newPerson(林黛玉,14);?运行代码我们得出:1.析构方法会自动调用2.析构方法主要用于销毁资源3.析构方法调用顺序是,先创建的对象后被销毁4.析构
本文标题:传智播客 韩顺平 php从入门到精通 61-78讲面向对象课堂笔记
链接地址:https://www.777doc.com/doc-4196808 .html