面向对象是一个编思想. 编程思想有面向过程和面向对象.
面向过程: 编程思路集中的是过程上
面向对象: 编程思路集中在参与的对象
多人合作方便
减少代码冗余, 灵活性高
代码的可用性发挥到极致
可扩展性强
oop: 面向对象编程
ooa: 面向对象分析
ood: 面向对象设计
1. 对象是具体存在的事物,对象是由属性(变量)和(方法)组成的
2. 类是具体相同属性和行为的一组对象的集合
在开发的时候,先写类, 通过类创建对象, 通过对象调用方法和属性
一个类可以创建多个对象
class 类名{ //属性 //方法 //常量}类是由属性,方法,常量组成的_________________________________________________________________________ <?php calss student { }; ?>
命名规则
以字母, 下划线开头, 后面跟的是字母, 数字, 下划线
不能用php关键字做类名
类名不区分大小写 (变量名区分, 关键字,类名不区分带小写). 类名用帕斯卡命名法 (大驼峰, 首字母大写)
通过new关键字来实例化对象
<?php // 定义类 class student{ } //实例化 $stu1=new student(); // 小括号可以省略 $stu2=new student;
对象的传递是地址传递
相等: 结构和保存的值一样就相等
全等: 指向同一个对象才是全等
<?php class stu{ } $stu1=new stu; $stu2=new stu; // 对象传递的是地址 $stu3=$stu2; //true var_dump($stu1==$stu2); //fal var_dump($stu1===$stu2); //true var_dump($stu2===$stu3);
属性本质就是变量
通过->
调用对象的成员 对象名 -> 属性名 对象名 -> 方法名()
<?php // 定义类 class stu { public $name; public $add='地址不详'; } // 实例化对象 $stu=new stu; $stu->name='tom'; $stu->add='北京'; // 获取属性的值 echo '姓名:'.$stu->name,'<br>'; echo '地址:'.$stu->add,'<br>'; // 添加属性 $stu->age=20; echo '年龄:'.$stu->age,'<br>'; //删除属性 unt($stu->add); print_r($stu);?>
3.2 方法 方法的本质就是函数
<?php // 定义类 class stu{ public function show() { echo '这是show方法<br>'; } function test(){ echo '这是test方法<br>'; } } // 调用方法 $stu=new stu; $stu->show(); $stu->金榜题名的祝福语test();?>
方法前面的public是可以省略的, 如果省略, 默认是public
属性前面的public不能省略
用来控制成员的访问权限
一般来说,属性都用私有的,通过公有的方法对私有的属性进行赋值和取值
作用: 保证数据的合法性
<?php class stu{ private $name; private $x; function tinfo($name,$x){ if($x!='男'&&$x!='女'){ echo '性别必须为男或女'; exit; } $this->name=$name; $this->x=$x; } function getinfo(){ echo '姓名: '.$this->name,'<br>'; echo '性别: '.$this->x,'<br>'; } } $stu=new stu; $stu->tinfo('tom','男'); $stu->getinfo(); echo '<hr>'; $stu1=new stu; $stu->tinfo('sunny','难啊难'); $stu->getinfo();?>
对象的本质是一个复杂的变量
类的本质是一个自定义的复杂数据类型
展区: 运行速度快, 体积小, 保存基本类型
堆区: 运行速度稍慢, 体积大, 保存复杂类型
实例化的过程就是分配内存空间的过程
对象保存在堆区, 将堆区的地址保存到栈区
计算机内存管理方式: 先进先出, 先进后出
先进先出的内存管理方式一般用在业务逻辑中, 比如秒杀, 购票等等
先进后出是计算机的默认内存管理方式
构造方法也叫构造函数, 当实例化对象的时候自动执行
<?php // 前面是两个下划线 function __construct(){ }___________________________________________________________________ class stu{ function __construct(){ echo '这是构造方法<br>';张丽华 } } new stu(); new stu();?>
在其它语言中, 与类名同名的函数时构造函数, 在php中不允许这种写法
初始化成员变量
构造函数可以带参数, 但不能有return
<?php class stu{ private $name; pr文化多样性ivate $x; function __construct($name,$x){ $this->name=$name; $this->x=$x; } function show(){ echo "姓名: {$this->name}<br>"; echo "性别: {$this->x}<br>"; } } $stu=new stu('wang','男'); $stu->show();?>
当对象销毁的时候自动调用
析构函数不可以带参数
function __destruct(){ }______________________________________________________________ <?php class stu{ private $name; function __construct($name){ $this->name=$name; echo "{$name}出生了<br>"; } function __destruct(){ echo "{$this->name}销毁了<br>"; } } $stu1=new stu('tom'); $stu2=new stu('wang'); echo '<hr>';?>
继承使得代码具有层次结构
子类继承父类的属性和方法, 实现代码的可重用性
使用extends关键字实现继承
父类和子类是相对的
class 子类 extends 父类{}___付款行_________________________________________________________ <?php class person{ function show(){ echo '这是人类<br>'; } } // 子类继承父类 class stu extends person{ } $stu=new stu; $stu->show();?>
执行过程
在stu类中查找show(), 如果找到就调用, 找不到就到父类中查找
在person类中查询show()
<?php class person{ function show(){ echo '这是人类<br>'; } } // 子类 class stu extends person{ function test(){ // 方法一 // $person=new person(); // $person->show(); // 方法二 $this->show(); } } $stu=new stu; $stu->test();?>
通过实例化父类调用父类的成员
通过$this关键字调用父类的成员
protected: 受保护的, 在整个继承链上使用
// 一<?php class a{ protected $num=10; } class b extends a { function getnum(){ echo $this->num; } } $obj=new b(); $obj->getnum();?>______________________________________________________________________ //二<?php class a { function getnum(){ echo $this->num; } } class b extends a { protected $num=10; } $obj=new b(); $obj->getnum();?>______________________________________________________________________________ //三<?php class a { function getnum(){ echo $this->num; } } class b extends a { protected $num=10; } //整个继承链上只有a $obj=new a(); //报错: notice:undefined property: a::$num $obj->getnum();?>
如果子类有构造函数就调用子类的, 如果子类没有就调用父类的构造函数
子类的构造函数调用后, 默认不再调用父类的构造函数
通过类名调用父类的构造函数
鲍照什么意思
类名::__construct()_______________________________________________________________________ <?php class person{ public function __construct(){ echo '这是父类<br>'; } } class stu extends person{ public function __construct(){ person::__construct(); parent::__construct(); echo '这是子类<br>'; } } new stu();?>
parent关键字表示父类的名字, 可以降低程序的耦合性
给父类传递参数
<?php class person{ protected $name; protected $x; public function __construct($name,$x){ $this->name=$name; $this->x=$x; } } class stu extends person{ private $score; public function __construct($name,$x,$score){ parent::__construct($name,$x); $this->score=$score; } public function getinfo(){ echo "姓名: {$this->name}<br>"; echo "性别: {$this->x}<br>"; echo "成绩: {$this->score}<br>"; } } $stu=new stu('wang','男',90); $stu->getinfo();?>
this表示当前对象的引用, 也就是this保存的当前对象的地址
<?php class a{ public function __construct(){ var_dump($this); } } class b extends a { } new a(); echo '<br>'; new b();?>
php不允许多重继承, 因为多次继承容易产生二义性.
如何实现c继承a和b, 使用继承链
本文发布于:2023-04-07 05:33:47,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/014ca3fa255612ce3815961d059a50da.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:PHP面向对象(一).doc
本文 PDF 下载地址:PHP面向对象(一).pdf
留言与评论(共有 0 条评论) |