参考在线文档,整理php中类的相关概念如下
 
$this 在类的内部可以使用伪变量$this,这个伪变量为一个到主叫对象(经个人测试理解这应该是在运行时的真实对象,不是类,运行时绑定)的引用,所以一个类中使用$this,在运行时,这个$this指代的可能是该类的对象,也可能是该来的子类对象,也可能是其他对象,参考例子
 
继承 php中不支持多继承,一个类只能继承一个基类,被继承的方法和属性可以用同样的名字重新声明覆盖,父类中定义的常属性和常方法不能被覆盖,可以通过parent来访问被覆盖的属性或方法
 
属性 类的属性初始化的值必须是常数(php脚本在编译阶段就可以得到的值,不依赖运行时的环境。比如字符串,整数,数组),属性有静态属性和非静态属性,非静态属性可以使用->访问,也可以使用::访问,静态属性只能通过::访问
 
类常量 定义和使用类常量的时候不需要使用$,类常量不能用访问控制符修饰,类常量的值必须是一个定值,不能是变量,类属性,数学运算的结果或函数调用。使用::访问类常量,不需要实例化对象也可以访问类常量,类常量也算一个特殊的静态属性
 
类自动加载,类的使用,都必须先引入类文件,php5之后,可以使用 spl_autoload_register()函数注册任意数量的自动加载器,当使用未被引入的类或接口时,通过自动加载器,脚本引擎在php错误失败前有最后一个机会加载所需要的类文件
 
构造函数与析构函数 php中的这两个函数,一个是在对象被创建的时候被执行,一个是在某个对象的所有引用都被删除或对象被显式销毁时执行。要注意的就是在继承中,子类的构造函数在参数上可以和父类不同;其次就是如果子类没有定义构造函数或析构函数,会继承父类的;子类如果定义了,父类的构造函数就不会被隐式调用,除非在子类的构造函数中显示调用父类构造函数
 
访问控制(可见性) 类的属性和方法的访问控制有3种,public,protected,private。被定义为public的可以在任何地方被访问,被定义成protected的只能被其自身或子类或父类访问,被定义为private的只能被其自身访问
 
范围解析操作符(::) self,parent,static这三个特殊关键词可以用在类的内部对其属性或方法进行访问
 
static 声明类的属性或方法为静态,就可以不实例化类直接访问,静态属性不能通过实例化的对象访问,静态方法可以通过实例化的对象访问
 
对象接口 接口中定义的所有方法必须是共有的,这是接口特性
 
trait 解决php中单继承的一种代码复用机制,组合功能
 
对象遍历 默认情况下,用foreach对类对象进行遍历,类的public属性都会被遍历到。进一步,可以让类实现Iterator接口(实现rewind,current,key,next,valid方法)让类决定如何遍历。也可以实现IteratorAggregate接口(实现getIterator方法,这个方法返回一个实现了Iterator或Traversable接口的类)来自定义遍历
 
final(常类,常方法) php5后新增的,类中方法被声明为final,子类无法覆盖,类被声明为final,不能被继承
 
clone php中,对象变量存储的是对象的标识,对象变量赋值给其他变量,只是将标识复制给了其他变量,对象不会新增。修改一个对象变量的属性会影响到其他指向相同对象的变量,如果采用clone,会新增一个新的对象,新对象内部的属性如果是仍旧是对象,需要实现模式方法__clone(),进行内部属性克隆
 
对象比较 比较原则,使用==,两个对象是同一个类实例,属性和属性值都相等,相等。使用===,两个对象变量指向某个类的同一个实例,相等
 
类型约束 php5之后,可以在函数的参数上使用类型约束,类型约束不能用于标量类型,比如int,string,trait也不行
 
后期静态绑定 self或者__CLASS__是对当前类的静态引用,取决于定义当前方法所在的类。static不再被解析为定义当前方法所在的类,而是实际运行时计算的
 
对象和引用 php5之后,一个对象变量不再保存这个对象的值,只是保留一个对象的标识,用于访问真正的对象内容。当对象作为参数,函数返回,赋值(不是clone)给其他变量,另外一个变量同样也是保存同一个标识的拷贝,这个标识可以指到正真内容
 
对象序列化 序列化方法serialize(),钩子__sleep()。反序列化方法unserialize(),钩子__wakeup()
 
 
 
 
 
 
 
 
 
 

类(class)相关概念小结的更多相关文章

  1. Java中sleep()与wait()区别(涉及类锁相关概念)

    在区别之前,我们首先先了解一下关于对象锁,类锁的相关概念(当时查阅的详细地址:http://www.importnew.com/20444.html,该作者对类锁和对象锁进行了详细的举例分析) 对象锁 ...

  2. iOS多播Delegate类——GCDMulticastDelegate用法小结

    iOS中通常的delegate模式只能有一个被委托的对象,这样当需要有多个被委托的对象时,实现起来就略为麻烦,在开源库XMPPFramework中提供了一个GCDMulticastDelegate类, ...

  3. Objective-C 里面的类对象复用小结

    OC 提供了单继承 (Inheritance), Category, Extension, Protocol 这几种基本的类与对象层面的复用机制,作一小结. 在这几个机制中,继承提供了纵向的复用,可以 ...

  4. Java面向对象06——类与对象小结

    小结  /* 1. 类与对象    类是一个模板:抽象,对象是一个具体的实例 2. 方法    定义.调用 ​ 3. 对应的引用    引用类型: 基本类型(8)    对象是通过引用来操作的:栈-- ...

  5. C++ 学习笔记(五)类的知识小结一(重载,友元函数,静态成员,new)

    ---恢复内容开始--- 学习C++类知识点还是挺多的,每个知识点学习的时候都觉得这个知识点咋那么多东西,其实真学完了再回头看好像也就那么点.这次用程序写一个黑猫揍白猫的故事总结一下这段时间学习的零碎 ...

  6. 2.4 UML类图

    类图定义 类class的定义 具有相同属性.操作.方法.关系或者行为的一组对象的描述符 类是真实世界事物的抽象 问题领域的类:在对系统建模时,将会涉及到如何识别业务系统中的事物,这些事物构 成了整个业 ...

  7. 窗口类(Window Class)概述

    windows窗口编程(通常意义上的win32)有几个比较核心的概念:入口函数WinMain.窗口类Window Class.窗口过程.消息处理机制.通用控件.本文主要介绍窗口类的相关概念,包括: 窗 ...

  8. Linq之隐式类型、自动属性、初始化器、匿名类

    目录 写在前面 系列文章 隐式类型 自动属性 初始化器 匿名类 总结 写在前面 上篇文章是本系列的小插曲,也是在项目中遇到,觉得有必要总结一下,就顺手写在了博客中,也希望能帮到一些朋友.本文将继续介绍 ...

  9. C#类和成员定义

    1 定义类     C#用关键字class来定义类.默认情况下,类声明为内部(internal)的,即只有当前项目中的代码才能访问它.与之相对应的,还可以用public关键字来修饰,这样该类还可以由其 ...

随机推荐

  1. spring cloud学习(四) 动态路由

    Zuul的主要功能是路由和过滤器.路由功能是微服务的一部分,zuul实现了负载均衡. 1.1 新建模块zuul pom.xml <?xml version="1.0" enc ...

  2. Java并发编程总结2——慎用CAS

    一.CAS和synchronized适用场景 1.对于资源竞争较少的情况,使用synchronized同步锁进行线程阻塞和唤醒切换以及用户态内核态间的切换操作额外浪费消耗cpu资源:而CAS基于硬件实 ...

  3. drf-序列化器的理解

    序列化器作用:  1.进行数据的校验 2.对数据对象进行转换 序列化:  模型类对象  ----->  python字典    用于输出, 返回给前端使用 反序列化:  前端传送的数据  --- ...

  4. eslint 配置及规则说明

    中文官方网站 安装 可以全局安装,也可以在项目下面安装. 如下是在项目中安装示例,只需要在 package.json 中添加如下配置,并进行安装: “eslint”: “^4.11.0” 配置 配置方 ...

  5. 社会地位即服务, Status as a Service (二): 社交网络的投资回报率 (ROI)

    本文作者 Eugene Wei 是 Amazon 战略部门的第一位分析师,后来还担任过 Flipboard, Hulu, Oculus 的产品负责人. 原文标题是 Status as a Servic ...

  6. vue教程2-07 自定义指令

    vue教程2-07 自定义指令 自定义指令: 一.属性: Vue.directive(指令名称,function(参数){ this.el -> 原生DOM元素 }); <div v-re ...

  7. 九浅一深ThreadLocal

    ThreadLocal的作用.使用示例 ThreadLocal是线程的本地存储,存储在其内的值只能被当前线程访问到,其他线程获取不到,可以存储任意对象.经常用来存储当前线程的一些上下文信息,这样不用通 ...

  8. C# 多线程学习系列四之ThreadPool取消、超时子线程操作以及ManualResetEvent和AutoResetEvent信号量的使用

    1.简介 虽然ThreadPool.Thread能开启子线程将一些任务交给子线程去承担,但是很多时候,因为某种原因,比如子线程发生异常.或者子线程的业务逻辑不符合我们的预期,那么这个时候我们必须关闭它 ...

  9. tomcat 最大并发数

    只针对BIO模式,目标请求会sleep两秒再返回结果,通过jmeter测试工具进行并发测试 操作系统:windows && linux tomcat7测试: <Connector ...

  10. 微信小程序网络封装-简单高效

    废话引言 小程序虽然出世很久了,但一直没怎么接触到小程序开发.吉他兴趣班老师想弄一个小程序发布课程信息和打卡功能,作为IT一员就自愿加入了这个小程序开发小组中.虽然小程序面向的是前端工程师,但作为移动 ...