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(一)
接上文 多线程编程学习笔记——使用并发集合(一) 接上文 多线程编程学习笔记——使用并发集合(二) 接上文 多线程编程学习笔记——使用并发集合(三) 假设以下场景,如果在客户端运行程序,最的事情之一是 ...
随机推荐
- php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法
php 获取今日.昨日.上周.本月的起始时间戳和结束时间戳的方法,主要使用到了 php 的时间函数 mktime.下面首先还是直奔主题以示例说明如何使用 mktime 获取今日.昨日.上周.本月的起始 ...
- nginx 代理概念理解
学习nginx http://www.nginx.cn/nginx-how-to nginx官方定义: Nginx 是一个高性能的 Web 和反向代理服务器. 首先明确一个概念 反向代理 反向代理(R ...
- 作业.把c语言输出的基础差不多都概括了!
// (1)1英里=1.60931公里,从键盘上输入英里数输出公里数 #include "stdio.h" #define PI 3.1415926 #include " ...
- gradle 集成到myeclipse
新的项目用到gradle,所以学了下,地址:http://dist.springsource.com/release/TOOLS/gradle :help 下,安装好,重启即可,gradle作为mav ...
- [Angular 2] Template property syntax
This lesson covers using the [input] syntax to change an element property such as “hidden” or “conte ...
- Linux如何关闭防火墙和查看防火墙的具体情况
1.Linux下关闭和开启防火墙 1) 重启后生效 开启: chkconfig iptables on 关闭: chkconfig iptables off 2) 即时生效,重启后失效 开启: ser ...
- Linux Terminal 控制终端的使用
1. Open new Terminal:Ctrl + Alt + T 或者 Ctrl + Shift + N 2. Open Tab:Ctrl + Shift + T 3. Close Tab:Ct ...
- Linux开发工具之Makefile(上)
二.makefile(上) 01.make工具 利用make工具可以自动完成编译工作.这些工作包括:如果修改了某几 个源文件,则只重装新编译这几个源文件:如果某个头文件被修改了,则 重新编译所有包 ...
- jquery之获取当前时间
/** * * 获取当前时间 */ function p(s) { return s < 10 ? '0' + s: s; } var myDate = new Date(); //获取当前年 ...
- xml文件中 android:showAsAction = " " 的作用
在xml文件中设置android:showAsAction = " "有什么作用呢 安卓开发项目文件中有一个目录叫做menu,里面有main.xmlitem选项里有一句 andro ...