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(一)
接上文 多线程编程学习笔记——使用并发集合(一) 接上文 多线程编程学习笔记——使用并发集合(二) 接上文 多线程编程学习笔记——使用并发集合(三) 假设以下场景,如果在客户端运行程序,最的事情之一是 ...
随机推荐
- 加密解密,CryptoStream()的使用
一:上图 二:代码 主界面代码 using System; using System.Collections.Generic; using System.ComponentModel; using S ...
- QQ互联 回调地址
http://wiki.connect.qq.com/%E5%9B%9E%E8%B0%83%E5%9C%B0%E5%9D%80%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98% ...
- Jenkins 十一: 构建Maven项目
1. 点击“新建”,在“Item名称”栏输入要构建的项目名,比如“Maven_project”,选择“构建一个maven项目”,点击“OK”按钮. 2. 找到“源码管理”-> “Subversi ...
- 遭遇多线程bug (1)
某些用户,机器重启后,到第三方服务器的连接起不来,而到我们自己服务器的连接就没事. 如果连接由于网络或其他原因fail掉,过一定时间后应该会重新尝试建立连接的. 测试组做初步调查,他们能在本地环境复现 ...
- OpenMP与C++:事半功倍地获得多线程的好处
来源:IIEEG 01-28-2011 在并行计算领域有一个广为流传的笑话——并行计算是未来之事并且永远都是.这个小笑话几十年来一直都是对的.一种类似的观点在计算机架构社区中流传,处理器时钟速度的极限 ...
- Delphi图像处理 -- RGB与HSL转换
阅读提示: <Delphi图像处理>系列以效率为侧重点,一般代码为PASCAL,核心代码采用BASM. <C++图像处理>系列以代码清晰,可读性为主,全部使用C ...
- iOS中ASI和AFN的区别
一.底层实现 1> AFN的底层基于OC的NSURLConnection和NSURLSession 2> ASI的底层基于纯C语言的CFNetwork框架 3> ASI的运行性能 高 ...
- linux下ssh免密登陆
如果 有A.B两台主机: 要实现的效果: A主机ssh登录B主机无需输入password: 加密方式选 rsa|dsa均能够.默认rsa 做法: 1.登录A主机 2.ssh-keygen -t [rs ...
- spring mvc DispatcherServlet详解前传---HttpServletBean类
从上章里我们已经看到: DispatcherServlet extends FrameworkServlet FrameworkServlet extends HttpServletBean impl ...
- Python开发【第八篇】:网络编程
Python之路[第六篇]:socket Socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字&quo ...