php面向对象编程--学习笔记
1.声明一个类
在php中使用class关键字创建一个新类,类包括属性与方法。语法格式如下:
- <?php
- class类名{
- 属性;
- 方法;
- }
- ?>
2.创建一个实例对象
创建对象的过程称为实例化,对象被创建时就包含3个特性:对象句柄,对象属性,对象方法;
对象句柄:用于区分不同的对象。对象创建好了就会获取一块存储空间,存储空间的地址即为对象的标识,也就是对象的句柄。
对象属性:用于描述对象的静态特征。
对象方法:用于描述对象的动态特征。
如果要创建一个新的且唯一的对象,可使用'&'引用符号。例如:
- <?php
- $对象名称 = new &类名称();
- ?>
当类实例化后,可以使用操作符'->'来调用对该对象的属性和方法。
3.类的属性与方法
属性的声明:关键字成员变量名;
关键字可以是public,private,protected,static中的任意一个,默认是public。
4.类的常量
常量使用const关键字来定义一个类的常量。类常量不与这个类的任何特定实例相关联,所以不可以使用间接引用操作符来访问它们。类常量通常要大写,如果多个类常量由多个单词组成,建议使用下划线将它们分开。
5.类的构造方法和析构方法
构造方法:一个类中只能有一个构造方法,构造方法不会被调用,只有在使用new关键字创建对象的时候才会调用构造方法。
例如:
- <?php
- class类名{
- function__construct(){
- 初始化语句;
- }
- }
- ?>
在工作中,也可以调用和实例化对象没有任何关系的类构造函数,只须在__construct前面加上类名,例如:类名::__construcr();
析构方法:析构方法与构造方法是相对的,它在某个对象中的所有引用都被删除或对象被显式销毁时执行。
例如:
- <?php
- class类名{
- function __destruct(){
- 初始化语句;
- }
- }
- ?>
脚本执行结束时,PHP会撤销内存中的所有对象,因此,如果实例化的类和实例时创建的信息都留在内存中,就不需要显示地声明析构函数。但是,如果实例化时创建了不容易丢失的数据,就应该在对象撤销时撤销这些数据,因此就需要定制析构函数。
6.静态属性与方法
将类中的属性与方法声明为静态的就叫做静态方法。静态方法不受任何具体对象的限制,所以不需要建立实例就可以直接引用类中的静态方法。
调用方式:类名称::静态方法名称
注释:'::'符号称为范围解析操作符,它可以用于访问静态成员,静态方法和常量,还可以用于覆盖类中的成员和方法。例如:
- <?php
- class sta_num{
- static$num=0;
- }
- sta_num::$num++;
- ?>
如果想在同一类的成员方法中访问静态属性,可以通过在该静态属性的名称前加上操作符'self::'来实现。
例如:
- <?php
- class sta_num{
- static$num=0;
- function add(){
- self::$num++;
- }
- }
- sta_num::$num++;
- ?>
7.对象的克隆
通过clone后可以得到的对象与原来的对象没有任何关系,它把原来对象的所有信息从内寻的位置中复制了一份,然后在内存中又开辟一个空间来存储克隆后的对象。例如:
- <?php
- calss a{}
- $ojectA= new a();
- $objectB= clone $objectA;
- ?>
如果在对象中定义了_clone方法,则可以在对象被克隆时来调整克隆行为,此方法的代码将在克隆的操作期间来执行。
8.继承
在PHP中,使用extends关键字来建立一个类的继承。格式如下:
- class 子类名称 extends 父类名称{
- 子类属性;
- 子类方法;
- }
当子类要调用父类的成员方法时需要用到关键字'patent::',例如:
parent::父类的成员方法
9.检测对象的类型
在php中可以使用instanceof运算符来检测当前对象是否属于同一个类。
10.多态
(1)通过继承抽象类实现多态
抽象类里面至少包含一个由关键字abstract修饰的抽象方法,抽象方法是不实现具体方法的空方法。抽象类不能被实例化,只能由子类去继承,然后在继承的子类中完成具体功能。
例如:
- <?php
- abstract class work{
- abstract function work_name($name);
- }
- class man extends work{
- function work_name($name){
- echo$name.'is true';
- }
- }
- class woman extends work{
- function work_name($name){
- echo $name.'is false';
- }
- }
- ?>
对于work类而言man,woman就是它多态的表现。
(2)通过接口实现多态
接口是一组成员方法声明的集合,它只包含一些空的成员方法或常量,这些空的成员方法将由实现该接口的类去实现。定义一个接口需要使用interface声明,定义接口的方法如下:
- interface 接口名称{
- 类常量;
- function 成员方法_1;
- function 成员方法_2;
- }
在接口中不存在构造方法和析构方法,接口可以被继承,它可以继承多个接口,而不能继承一个类。接口的实现需要使用关键字implements。当使用类来实现接口时,必须包含接口定义的所有方法,否则在运行时会出现错误。例如:
- <?php
- interface people{
- function favourate_sport();
- }
- class children implements people{
- function favourate_sport(){
- 方法体;
- }
- }
- class student implements people{
- function favourate_sport(){
- 方法体;
- }
- }
- ?>
对于接口people而言,类children和student就是其多态的表现。
- <pre name="code" class="php"><pre name="code" class="php"><p class="cjk" style="margin-bottom:0cm" align="LEFT"></p></pre>
- <pre></pre>
- <pre></pre>
- <pre></pre>
- <pre></pre>
- </pre>
php面向对象编程--学习笔记的更多相关文章
- JavaScript面向对象编程学习笔记
1 Javascript 面向对象编程 所谓"构造函数",其实就是一个普通函数,但是内部使用了this变量.对构造函数使用new运算符,就能生成实例,并且this变量会绑定在实例 ...
- PyTorch框架+Python 3面向对象编程学习笔记
一.CNN情感分类中的面向对象部分 sparse.py super(Embedding, self).__init__() 表示需要父类初始化,即要运行父类的_init_(),如果没有这个,则要自定义 ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- Linux Shell编程学习笔记——目录(附笔记资源下载)
LinuxShell编程学习笔记目录附笔记资源下载 目录(?)[-] 写在前面 第一部分 Shell基础编程 第二部分 Linux Shell高级编程技巧 资源下载 写在前面 最近花了些时间学习She ...
- DirectX 11游戏编程学习笔记之8: 第6章Drawing in Direct3D(在Direct3D中绘制)(习题解答)
本文由哈利_蜘蛛侠原创,转载请注明出处.有问题欢迎联系2024958085@qq.com 注:我给的电子版是700多页,而实体书是800多页,所以我在提到相关概念的时候 ...
- 多线程编程学习笔记——async和await(一)
接上文 多线程编程学习笔记——任务并行库(一) 接上文 多线程编程学习笔记——任务并行库(二) 接上文 多线程编程学习笔记——任务并行库(三) 接上文 多线程编程学习笔记——任务并行库(四) 通过前面 ...
- 多线程编程学习笔记——async和await(二)
接上文 多线程编程学习笔记——async和await(一) 三. 对连续的异步任务使用await操作符 本示例学习如何阅读有多个await方法方法时,程序的实际流程是怎么样的,理解await的异步 ...
- 多线程编程学习笔记——async和await(三)
接上文 多线程编程学习笔记——async和await(一) 接上文 多线程编程学习笔记——async和await(二) 五. 处理异步操作中的异常 本示例学习如何在异步函数中处理异常,学习如何对多 ...
- 多线程编程学习笔记——使用异步IO(一)
接上文 多线程编程学习笔记——使用并发集合(一) 接上文 多线程编程学习笔记——使用并发集合(二) 接上文 多线程编程学习笔记——使用并发集合(三) 假设以下场景,如果在客户端运行程序,最的事情之一是 ...
随机推荐
- dll文件已经引用,但using找不到命名空间
一:问题截图 二:解决办法 1.没看到lz的代码中有Vancl.Server的dll. 2.确实有编译不过的问题,是Vancl.WindowsServices这个工程的target framework ...
- 使用国内镜像通过pip安装python的一些包 Cannot fetch index base URL http://pypi.python.org/simple/
原文地址:http://www.xuebuyuan.com/1157602.html 学习flask,安装virtualenv环境,这些带都ok,但是一安装包总是出错无法安装, 比如这样超时的问题: ...
- hdu 4289 最小割,分拆点为边
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2609 #include <cstdio> #incl ...
- poj1009
题目大意:边缘检测 IONU卫星成像公司,公司记录和储存非常大的图片使用行程编码,你需要编写一个程序读取被压缩的图像,发现图像的边缘,描述如下,并且输出另一个发现的边缘压缩图像. 一个简单的边缘检测算 ...
- [置顶] [混迹IT职场系列]一、转正的那些事儿
讲起转正,是每个IT人进入职场后要面对的第一关,只有越过这第一关卡才能更加顺利玩弄职场或被职场玩弄或互相玩弄. 很多人觉得转正只需自身努力即可,譬如有句话叫做 “只要功夫深,铁针磨成棒”.其实不然,职 ...
- 在asp.net中使用confirm可以分为两种:
在asp.net中使用confirm可以分为两种: 1.没有使用ajax,confirm会引起也面刷新 2.使用了ajax,不会刷新 A.没有使用ajax,可以用StringBuilder来完成. ( ...
- PL/SQL 9.0工具技巧
1. 设置自动替换 tools--preferences--User interface--Editor--Autoreplace 2.
- 解决拼团首页swiper组件手动轮播卡顿问题
解决 swiper lag , 可能是渲染背景backface-visibility后导致卡顿吧! //以下代码添加到.swiper-wrapper中 -webkit-perspective: 300 ...
- Business Analysis and Essential Competencies
Requirements Classification Schema http://files.cnblogs.com/files/happlyonline/BABOK.pptx http://fil ...
- Android ViewPager FragmentPagerAdapter
ViewPager 里面放Fragment <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/and ...