1.声明一个类

在php中使用class关键字创建一个新类,类包括属性与方法。语法格式如下:

  1. <?php
  2. class类名{
  3. 属性;
  4. 方法;
  5. }
  6. ?>

2.创建一个实例对象

创建对象的过程称为实例化,对象被创建时就包含3个特性:对象句柄,对象属性,对象方法;

对象句柄:用于区分不同的对象。对象创建好了就会获取一块存储空间,存储空间的地址即为对象的标识,也就是对象的句柄。

对象属性:用于描述对象的静态特征。

对象方法:用于描述对象的动态特征。

如果要创建一个新的且唯一的对象,可使用'&'引用符号。例如:

  1. <?php
  2. $对象名称 = new &类名称();
  3. ?>

当类实例化后,可以使用操作符'->'来调用对该对象的属性和方法。

3.类的属性与方法

属性的声明:关键字成员变量名;

关键字可以是public,private,protected,static中的任意一个,默认是public。

4.类的常量

常量使用const关键字来定义一个类的常量。类常量不与这个类的任何特定实例相关联,所以不可以使用间接引用操作符来访问它们。类常量通常要大写,如果多个类常量由多个单词组成,建议使用下划线将它们分开。

5.类的构造方法和析构方法

构造方法:一个类中只能有一个构造方法,构造方法不会被调用,只有在使用new关键字创建对象的时候才会调用构造方法。

例如:

  1. <?php
  2. class类名{
  3. function__construct(){
  4. 初始化语句;
  5. }
  6. }
  7. ?>

在工作中,也可以调用和实例化对象没有任何关系的类构造函数,只须在__construct前面加上类名,例如:类名::__construcr();

析构方法:析构方法与构造方法是相对的,它在某个对象中的所有引用都被删除或对象被显式销毁时执行。

例如:

  1. <?php
  2. class类名{
  3. function __destruct(){
  4. 初始化语句;
  5. }
  6. }
  7. ?>

脚本执行结束时,PHP会撤销内存中的所有对象,因此,如果实例化的类和实例时创建的信息都留在内存中,就不需要显示地声明析构函数。但是,如果实例化时创建了不容易丢失的数据,就应该在对象撤销时撤销这些数据,因此就需要定制析构函数。

6.静态属性与方法

将类中的属性与方法声明为静态的就叫做静态方法。静态方法不受任何具体对象的限制,所以不需要建立实例就可以直接引用类中的静态方法。

调用方式:类名称::静态方法名称

注释:'::'符号称为范围解析操作符,它可以用于访问静态成员,静态方法和常量,还可以用于覆盖类中的成员和方法。例如:

  1. <?php
  2. class sta_num{
  3. static$num=0;
  4. }
  5. sta_num::$num++;
  6. ?>

如果想在同一类的成员方法中访问静态属性,可以通过在该静态属性的名称前加上操作符'self::'来实现。

例如:

  1. <?php
  2. class sta_num{
  3. static$num=0;
  4. function add(){
  5. self::$num++;
  6. }
  7. }
  8. sta_num::$num++;
  9. ?>

7.对象的克隆

通过clone后可以得到的对象与原来的对象没有任何关系,它把原来对象的所有信息从内寻的位置中复制了一份,然后在内存中又开辟一个空间来存储克隆后的对象。例如:

  1. <?php
  2. calss a{}
  3. $ojectA= new a();
  4. $objectB= clone $objectA;
  5. ?>

如果在对象中定义了_clone方法,则可以在对象被克隆时来调整克隆行为,此方法的代码将在克隆的操作期间来执行。

8.继承

在PHP中,使用extends关键字来建立一个类的继承。格式如下:

  1. class 子类名称 extends 父类名称{
  2. 子类属性;
  3. 子类方法;
  4. }

当子类要调用父类的成员方法时需要用到关键字'patent::',例如:

parent::父类的成员方法

9.检测对象的类型

在php中可以使用instanceof运算符来检测当前对象是否属于同一个类。

10.多态

(1)通过继承抽象类实现多态

抽象类里面至少包含一个由关键字abstract修饰的抽象方法,抽象方法是不实现具体方法的空方法。抽象类不能被实例化,只能由子类去继承,然后在继承的子类中完成具体功能。

例如:

  1. <?php
  2. abstract class work{
  3. abstract function work_name($name);
  4. }
  5. class man extends work{
  6. function work_name($name){
  7. echo$name.'is true';
  8. }
  9. }
  10. class woman extends work{
  11. function work_name($name){
  12. echo $name.'is false';
  13. }
  14. }
  15. ?>

对于work类而言man,woman就是它多态的表现。

(2)通过接口实现多态

接口是一组成员方法声明的集合,它只包含一些空的成员方法或常量,这些空的成员方法将由实现该接口的类去实现。定义一个接口需要使用interface声明,定义接口的方法如下:

  1. interface 接口名称{
  2. 类常量;
  3. function 成员方法_1;
  4. function 成员方法_2;
  5. }

在接口中不存在构造方法和析构方法,接口可以被继承,它可以继承多个接口,而不能继承一个类。接口的实现需要使用关键字implements。当使用类来实现接口时,必须包含接口定义的所有方法,否则在运行时会出现错误。例如:

  1. <?php
  2. interface people{
  3. function favourate_sport();
  4. }
  5. class  children implements people{
  6. function favourate_sport(){
  7. 方法体;
  8. }
  9. }
  10. class student implements people{
  11. function favourate_sport(){
  12. 方法体;
  13. }
  14. }
  15. ?>

对于接口people而言,类children和student就是其多态的表现。

    1. <pre name="code" class="php"><pre name="code" class="php"><p class="cjk" style="margin-bottom:0cm" align="LEFT"></p></pre>
    2. <pre></pre>
    3. <pre></pre>
    4. <pre></pre>
    5. <pre></pre>
    6. </pre>

php面向对象编程--学习笔记的更多相关文章

  1. JavaScript面向对象编程学习笔记

    1  Javascript 面向对象编程 所谓"构造函数",其实就是一个普通函数,但是内部使用了this变量.对构造函数使用new运算符,就能生成实例,并且this变量会绑定在实例 ...

  2. PyTorch框架+Python 3面向对象编程学习笔记

    一.CNN情感分类中的面向对象部分 sparse.py super(Embedding, self).__init__() 表示需要父类初始化,即要运行父类的_init_(),如果没有这个,则要自定义 ...

  3. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  4. Linux Shell编程学习笔记——目录(附笔记资源下载)

    LinuxShell编程学习笔记目录附笔记资源下载 目录(?)[-] 写在前面 第一部分 Shell基础编程 第二部分 Linux Shell高级编程技巧 资源下载 写在前面 最近花了些时间学习She ...

  5. DirectX 11游戏编程学习笔记之8: 第6章Drawing in Direct3D(在Direct3D中绘制)(习题解答)

            本文由哈利_蜘蛛侠原创,转载请注明出处.有问题欢迎联系2024958085@qq.com         注:我给的电子版是700多页,而实体书是800多页,所以我在提到相关概念的时候 ...

  6. 多线程编程学习笔记——async和await(一)

    接上文 多线程编程学习笔记——任务并行库(一) 接上文 多线程编程学习笔记——任务并行库(二) 接上文 多线程编程学习笔记——任务并行库(三) 接上文 多线程编程学习笔记——任务并行库(四) 通过前面 ...

  7. 多线程编程学习笔记——async和await(二)

    接上文 多线程编程学习笔记——async和await(一) 三.   对连续的异步任务使用await操作符 本示例学习如何阅读有多个await方法方法时,程序的实际流程是怎么样的,理解await的异步 ...

  8. 多线程编程学习笔记——async和await(三)

    接上文 多线程编程学习笔记——async和await(一) 接上文 多线程编程学习笔记——async和await(二) 五.   处理异步操作中的异常 本示例学习如何在异步函数中处理异常,学习如何对多 ...

  9. 多线程编程学习笔记——使用异步IO(一)

    接上文 多线程编程学习笔记——使用并发集合(一) 接上文 多线程编程学习笔记——使用并发集合(二) 接上文 多线程编程学习笔记——使用并发集合(三) 假设以下场景,如果在客户端运行程序,最的事情之一是 ...

随机推荐

  1. 加密解密,CryptoStream()的使用

    一:上图 二:代码 主界面代码 using System; using System.Collections.Generic; using System.ComponentModel; using S ...

  2. 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% ...

  3. Jenkins 十一: 构建Maven项目

    1. 点击“新建”,在“Item名称”栏输入要构建的项目名,比如“Maven_project”,选择“构建一个maven项目”,点击“OK”按钮. 2. 找到“源码管理”-> “Subversi ...

  4. 遭遇多线程bug (1)

    某些用户,机器重启后,到第三方服务器的连接起不来,而到我们自己服务器的连接就没事. 如果连接由于网络或其他原因fail掉,过一定时间后应该会重新尝试建立连接的. 测试组做初步调查,他们能在本地环境复现 ...

  5. OpenMP与C++:事半功倍地获得多线程的好处

    来源:IIEEG 01-28-2011 在并行计算领域有一个广为流传的笑话——并行计算是未来之事并且永远都是.这个小笑话几十年来一直都是对的.一种类似的观点在计算机架构社区中流传,处理器时钟速度的极限 ...

  6. Delphi图像处理 -- RGB与HSL转换

    阅读提示:     <Delphi图像处理>系列以效率为侧重点,一般代码为PASCAL,核心代码采用BASM.     <C++图像处理>系列以代码清晰,可读性为主,全部使用C ...

  7. iOS中ASI和AFN的区别

    一.底层实现 1> AFN的底层基于OC的NSURLConnection和NSURLSession 2> ASI的底层基于纯C语言的CFNetwork框架 3> ASI的运行性能 高 ...

  8. linux下ssh免密登陆

    如果 有A.B两台主机: 要实现的效果: A主机ssh登录B主机无需输入password: 加密方式选 rsa|dsa均能够.默认rsa 做法: 1.登录A主机 2.ssh-keygen -t [rs ...

  9. spring mvc DispatcherServlet详解前传---HttpServletBean类

    从上章里我们已经看到: DispatcherServlet extends FrameworkServlet FrameworkServlet extends HttpServletBean impl ...

  10. Python开发【第八篇】:网络编程

    Python之路[第六篇]:socket   Socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字&quo ...