Note:类(Class)
静态成员,可以看作是属于整个类而不是类的某个实例,只保留一个变量值,而这个变量值对所有实例都有效,也就是说,所有实例共享这个变量
$this只表示当前实例,self::表示类本身,在类之外的代码中不能使用self::,且self::不能标识自己在继承树层次结构中的位置。也就是说,在扩展类中使用self::作用域时,self::可以调用基类中声明的方法,但它调用的总是已经在扩展类中重写的方法。与$this不同的是,在使用静态变量时,必须在作用域限定符后面加上$符号。
在扩展类中,在基类方法被重写的情况下,使用parent作用域调用定义在基类中的方法。静态成员可以只属于父类。如果在子类和父类中同事声明了某个成员,可以使用parent:;在子类中访问父类中的变量。在某些情况下,父类的静态成员和子类的静态成员保存不同的值。
可以在::操作符左边写上类的名称来静态的访问某个成员,这样避免创建类的实例。不仅省略实例化类的代码,而且还会更搞笑,因为类的每个实例都会调用一小部分的系统资源。
在使用::操作符访问成员变量的时候,需要注意对$符号的使用。因为PHP当前不支持动态的静态变量使用,也就是说不支持可变的静态变量。在使用$this->$var时,被访问的成员是包含在$var中的变量的值,而不用$符号访问某个变量实际上查找类的某个常量,而常量是不能通过$this来访问的。
PHP6提出的static::作用域使我们不再需要使用self::和parent::。当希望指向最终的实现功能的类时,可以使用static::,这个限定符会在代码执行之前计算出继承层次结构上最后那个类的成员,这一过程被称为延迟绑定,它使我们可以在子类中重写某个静态变量,并且也可以从某个在父类中声明的函数中范文这个最终还曾元。
静态方法与非静态方法间的一个重要区别:在调用静态方法时,不再需要拥有类的实例。
静态方法与非静态方法的使用原则:如果某个方法中不包含$this变量,就应该使用静态方法;如果不需要类的实例,可能还应该使用静态类来避免去实例化类的工作,静态方法中不能使用$this变量,因为静态方法不属于某个特定的实例。
instanceof可以确定一个对象时类的实例、类的子类、还是实现了某个接口,并进行相应的操作
类辅助函数
boolean class_exists(string class_name)
string get_class(object object) //确定对象的上下文
array get_class_methods(mixed class_name)
array get_class_vars(string class_name) //定义的字段
array get_declared_classes(void) //当前执行脚本中定义的所有类名
array get_object_vars(object object)
string get_parent_class(mixed object)
boolean interface_exists(string interface_name[, boolean autoload])
boolean is_subclass_of(object object, string class_name)
boolean method_exists(object object, string method_name)
__autoload函数,当引用未在脚本中定义的类时会自动调用个函数
newObject = clone oldObject;
__clone()方法用来调整对象的克隆行为,在代码克隆操作期间执行。
不支持方法重载、操作符重载、多重继承
Note:类(Class)相关推荐
- 三星一体计算机参数,三星四核机皇 Galaxy Note 10.1初体验
若将时间往前推移10年那时的手机还谈不上智能,如果是五年前就正是笔记本电脑市场燃起星星之火的时候,而两年前平板电脑的概念才开始深入人心.当这些产品一个个走上历史舞台的时候可能很单纯也很迷茫,想法很好却 ...
- 《Ember.js实战》——2.3 计算属性
本节书摘来自异步社区<Ember.js实战>一书中的第2章,第2.3节,作者:[挪]Joachim Haagen Skeie(乔基姆•哈根•斯基)著,更多章节内容可以访问云栖社区" ...
- 《101 Windows Phone 7 Apps》读书笔记-PASSWORDS SECRETS
课程内容 Ø 加密和解密 Ø 密码输入框 Ø 值转换 Ø DataTimeOffset Ø 可观察集合 Ø INotifyPropertyChanged事件 Passwords & Secre ...
- Windows Phone 7项目实战之记事本(二)
Windows Phone 7记事本的第二部分讲解记事本的基本功能. 功能点: 1.添加日记功能 2.修改日记功能 3.删除日记功能 4.简单帮助功能 5.显示已写日记列表功能 一.显示已写日记列表功 ...
- 渡虎谷告诉你CSS的结构和规则
基本语法 规则 选择符 任何HTML元素都可以是一个CSS1的选择符.选择符仅仅是指向特别样式的元素.例如, P { text-indent: 3em } 当中的选择符是P. 类选择符 单一个选择符能 ...
- Effective C++ 第二版 1)const和inline 2)iostream
条款1 尽量用const和inline而不用#define >"尽量用编译器而不用预处理" Ex. #define ASPECT_R 1.653 编译器永远不会看到AS ...
- JavaScript 中的函数式编程实践
为什么80%的码农都做不了架构师?>>> 基础知识 函数式编程简介 说到函数式编程,人们的第一印象往往是其学院派,晦涩难懂,大概只有那些蓬头散发,不修边幅,甚至有些神经质的大学 ...
- 第二节 显示页面标题
# 代码 项目刚创建的时候,只有一个js文件,index.android.js,我们将其简化一下,代码如下: import React, { AppRegistry, Component, Text} ...
- Android 高级面试-2:IPC 相关
内容 IPC 就是指跨进程通信.IPC 相关的内容,涉及的主要有: 常见的 IPC 通信方式: Binder 相关: 两种序列化方式及其对比: 问题 IPC Android 上的 IPC 跨进程通信时 ...
- android 序列化传参数,Android序列化之Parcelable和Serializable的使用详解
序列化与反序列 首先来了解一下序列化与反序列化. 序列化 由于存在于内存中的对象都是暂时的,无法长期驻存,为了把对象的状态保持下来,这时需要把对象写入到磁盘或者其他介质中,这个过程就叫做序列化. 反序 ...
最新文章
- 双边z变换公式_光通信与数学 傅里叶变换
- 上传问题分析2--文件重名
- 分布式缓存应用(转载的)
- CNG 关于 Key 相关的操作
- shell日志重定向到null
- 第43条:掌握GCD及操作队列的使用时机
- python3安装教程
- 华为服务器麒麟系统,麒麟服务器
- boost升压电路解析
- SpringMvc工作原理学习总结
- 向量叉乘的线性性质 几何解释
- 微信小程序发送微信公众号模板消息
- UltraCompare文件内容比较工具
- java首字母变大写_Java 首字母转大写
- matlab mcc-m,【matlab】matlab中 mcc、mbuild和mex命令详解
- 一文了解数据分析师与商业分析师的区别(二)
- 反入侵体系建设入门-攻击场景梳理
- SAPI ++微信SaaS平台源码v1.8.7.1
- 【OSPF外部路由-4类LSA(sum-asbr)和5类LSA(external)以及7类LSA(Nssa)】(OSPF的特殊区域)(外部路由选路特性)
- Python人脸微笑识别2-----Ubuntu16.04基于Tensorflow卷积神经网络模型训练的Python3+Dlib+Opencv实现摄像头人脸微笑检测
热门文章
- R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(配置数据点显示)实战
- python机器学习可视化工具Yellowbrick绘图获取最佳聚类K值实战示例
- Hash+哈希表+HashMap+HashSet
- 为什么RStudio Server这么慢?
- kubeasz_使用kubeasz安装K8S集群,不受国内网络环境影响
- 快手小葫芦网红收入大数据_KS第一个粉丝量破亿账号出现,竟是他!送辛巴上央视的网红被曝光!方丈曝出被封杀网红身份信息!球球自爆发家史,偷卖赵本山老师鞋子!...
- lnmp php编译参数,LAMP、LNMP环境编译参数查询
- 快速人群密度估计--Multi-scale Convolutional Neural Networks for Crowd Counting
- LeetCode 202. Happy Number--Python解法
- LeetCode hard 84. Largest Rectangle in Histogram--python,java 15行,c++ 15行 解法