最新传智播客韩顺平php从入门到精通6178讲面向对象课堂笔记.docx
- 文档编号:25986488
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:48
- 大小:303.18KB
最新传智播客韩顺平php从入门到精通6178讲面向对象课堂笔记.docx
《最新传智播客韩顺平php从入门到精通6178讲面向对象课堂笔记.docx》由会员分享,可在线阅读,更多相关《最新传智播客韩顺平php从入门到精通6178讲面向对象课堂笔记.docx(48页珍藏版)》请在冰豆网上搜索。
最新传智播客韩顺平php从入门到精通6178讲面向对象课堂笔记
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. 成员属性是从某个事物提取出的,它可以是基本数据类型(整数、小数、字符、布尔),也可以是复合数据类型(数组、对象)
php
classCat{
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."
";
echo$b->name."
";
5 分钟前上传
下载附件(32.15KB)
再次说明:
$a=78;
//$b=$a;
$b=&$a;
$b=$b+8;
echo$a."||".$b;
5 分钟前上传
下载附件(16.16KB)
如果给一个函数传递一个对象,实际上是传递的一个地址.
//看下面的一段代码:
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语句;
}
php
classPerson{
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);
echo"23+89=".$p1->add(23,89);
?
>
成员方法的细节
我们在实际开发,其实通常是这样来使用类
Person.class.php
php
classPerson{
//成员属性
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;$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();.. ? > 案例: 编写一个函数(以面向对象的方式开发),从网页输入一个整数打印出对应的金子塔: 当我们学习完成员方法后,我们的类定义就完善一步了: 23 秒前上传 下载附件(14.28KB) 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); echo"hello-".$p1->name; $p2=newPerson("宋江",33); echo"aa-".$p2->name; $this理解图: 2 分钟前上传 下载附件(39.03KB) ☞1.$this本质可以理解就是这个对象的地址 2.哪个对象使用到$this,就是哪个对象地址 3.$this不能在类外部使用. 构造方法的注意事项 (1)一旦自定义了一个构造函数,默认的 构造函数就被覆盖了,这时在创建对象的时候就要使用自定义的构造函数. (2)一个类只能有一个构造函数.(不能重载) 构造方法的8点说明: ①构造方法名和类名相同(php4版),php5版的构造方法 名可以和类名相同,也可以是__construct() ②构造方法没有返回值 ③主要作用是完成对新对象的初始化,并不是创建对象本身。 ④在创建新对象后,系统自动的调用该类的构造方法 ⑤一个类有且只有一个构造方法,在php5后虽然__construct() 和类名()可以共存,但是实际上也只能使用一个。 ⑥如果没有给类自定义构造方法,则该类使用系统默认的构造方法。 classCat{ funciton__construt($name){ echo“ok”; } } $cat1=newCat(); ⑦如果给类自定义了构造方法,则该类的默认构造方法被覆盖。 ⑧构造方法的默认访问修饰符是public 析构方法 析构方法的作用主要用于,释放资源(比如释放数据库的链接,图片资源...销毁某个对象..) 快速入门 php classPerson{ public$name; public$age; public$conn; //构造方法 publicfunction__construct($name,$age){ $this->name=$name; $this->age=$age; //打开一个$conn链接数据库的资源 } //写一个析构方法__是两个下划线 function__destruct(){ echo$this->name."销毁资源关闭数据库.. } } $p1=newPerson("贾宝玉",16); $p2=newPerson("林黛玉",14); ? > 运行代码我们得出: 1. 析构方法会自动调用 2. 析构方法主要用于销毁资源 3. 析构方法调用顺序是,先创建的对象后被销毁 4. 析构方法什么时候被调用 (1) 当程序(进程结束)退出时 (2) 当一个对象称为垃圾对象的时候,该对象的析构方法也会被调用, (3) 所谓垃圾对象,就是指,没有任何变量再引用它. (4) 一旦一个对象成为垃圾对象,析构方法就会立即调用 示意图: 2 分钟前上传 下载附件(24.33KB) 小结: ①php5加入的的析构方法function__destruct() ②析构方法没有返回值 ③主要作用是释放资源的操作,并不是销毁对象本身。 ④在销毁对象前,系统自动的调用该类的析构方法 ⑤一个类最多只有一个析构方法。 更新时间: 2013年01月03日17时03分来源: 静态变量 提出一个问题: 说,有一群小孩在玩堆雪人,不时有新的小孩加入, 请问如何知道现在共有多少人在玩? 请使用面向 对象的思想,编写程序解决。 思路: 1. 使用全局变量 *什么是全局变量,在程序中,都可以使用的变量称为全局变量. 当我们了解全局变量后,我们来看看如何解决问题? php //定义,完游戏的全局变量 global$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();
";
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 传智播客韩 顺平 php 入门 精通 6178 面向 对象 课堂 笔记