php面向对象编程学习之高级特性
前几天写了一篇关于php面向对象基础知识的博客,这两天看了php面向对象的高级特性,写出来记录一下吧,方便以后拿出来复习。
面向对象除了最基本的定义类之外,最主要就是因为面向的一些高级特性,运用这些高级特性,我们可以写出更加合理优雅的代码(ps:上述官方语言都是在网上摘抄,由于没有多少面向对象编程的经验,自己仅仅是记录自己的学习心得)。闲话扯完,接下来说说面向对象。
(1)静态方法和属性:
在面向对象的基础中,我们对类中属性的访问几乎都是首先进行类的实例化,得到实例化后的对象,通过对象进行访问。其实在面向对象中,也不仅仅只能通过对象访问类的属性,还可以通过类访问属性 ,这样的属性和方法就是“静态的”,必须用static关键字来声明。
class StaticExample{
static public $num=0;
static public function sayHello(){
print "hello world!";
}
}
静态方法可以不能访问这个类的普通属性,因为那些属性属于一个对象(通俗说就是普通属性在对象中有效),静态方法可以访问静态属性。一个实例化的对象可以访问静态方法,但不可以访问静态属性。所以,通过类访问静态元素时使用::(两个英文冒号)来连接类名和属性或类名和方法。
print StaticExample::$num;
StaticExample::sayHello();
通过上面这种访问方式,就可以将类的静态属性$num打印出来。上面这种方式是在类的外部访问静态属性和静态方法时的做法。既然这样,那如何在类的内部访问静态属性和静态方法呢?php给出了一个关键字self,self关键字指向当前类,与$this不同,$this代表的是当前对象。
<?php
class StaticExample{
static public $num=0;
static public function say(){
self::$num++;
var_dump(self::$num);
}
}
$staticExam=new StaticExample();
$staticExam->say();
?>
输出结果为int(1)。
(2)常量属性:
常量属性,顾名思义就是设置后不可改变的量,当一个可以访问的属性的值无需改变时,就应该使用常量。常量使用关键字const来声明,常量不以美元符号开头,通常使用大写字母来命名常量。可定义为常量的值只能是基本数据类型的值,只能通过类而不能通过类的实例(对象)来访问常量属性,引用常量时不需要用$符号,访问时通过“类名::常量”的形式访问。
(3)抽象类:
抽象类:一种不能被直接实例化的类,任何一个类,如果其中至少有一个方法被声明为抽象的,则这个类就必须被声明为抽象的,被定义为抽象的方法只是声明了其调用方式,不能有具体的功能实现。当继承一个抽象类的时候,子类必须定义父类中所有的抽象方法。这些方法在访问控制上至少要和父类一致(或者更为宽松)
php面向对象编程学习之高级特性的更多相关文章
- python面向对象编程学习
python面向对象编程 基本概念理解 面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作 ...
- PHP面向对象编程学习之对象基础
php虽然是一门学习起来非常简单的语言,但是这门语言也包含了对面向对象编程的支持.尤其是随着php5的发布,php对面向对象的支持有了很大的进步.最近学习了一下php的面向对象编程,不禁感慨,面向对象 ...
- Python之面向对象编程学习
不知不觉,学到了python的面向对象编程思想.今天我们来讨论下面向对象编程的思想. 顾名思义,面向对象,就是面向于对象,这里所说的对象不是你现实生活中你的女朋友,你的老婆,你的爱人,在编程的世界里面 ...
- MapReduce编程实战之“高级特性”
本篇介绍MapReduce的一些高级特性,如计数器.数据集的排序和连接.计数器是一种收集作业统计信息的有效手段.排序是MapReduce的核心技术,MapReduce也可以运行大型数据集间的" ...
- python 面向对象编程学习
1. 问题:将所有代码放入一个py文件:无法维护 方案:如果将代码才分放到多个py文件,好处: 1. 同一个名字的变量互相不影响 2.易于维护 3.引用模块: import module 2.包:解决 ...
- JavaScript面向对象编程学习笔记
1 Javascript 面向对象编程 所谓"构造函数",其实就是一个普通函数,但是内部使用了this变量.对构造函数使用new运算符,就能生成实例,并且this变量会绑定在实例 ...
- PyTorch框架+Python 3面向对象编程学习笔记
一.CNN情感分类中的面向对象部分 sparse.py super(Embedding, self).__init__() 表示需要父类初始化,即要运行父类的_init_(),如果没有这个,则要自定义 ...
- JS面向对象编程学习
学习目标:1.掌握JS中的类(原型对象)和对象.2.什么是成员变量和成员方法.3.掌握构造方法的使用.补充:关于双等号(==):1.如果等号两边都是字符串时,则比较内容是否相等2.如果等号两边是数字时 ...
- python 面向对象编程学习总结
面向对象是个抽象的东西,概念比较多,下面会一一介绍. 一.类和实例 类(Class)和实例(Instance)是面向对象最重要的概念. 类是指抽象出的模板.实例则是根据类创建出来的具体的“对象”,每个 ...
随机推荐
- c++到c#数据类型的转换
c++与c#的类型转换 分类:cSharp | 标签: c# system intptr char uint 2012-02-29 19:54 阅读(513)评论(0)编辑删除 //c++: ...
- codevs1127
学校里有一个水房,水房里一共装有m 个龙头可供同学们打开水,每个龙头每秒钟的供水量相等,均为1. 现在有n 名同学准备接水,他们的初始接水顺序已经确定.将这些同学按接水顺序从1到n 编号,i 号同学的 ...
- HTML5 canvas绘制线条曲线
HTML5 canvas入门 线条例子 1.简单线条 2.三角形 3.填充三角形背景颜色 4.线条颜色以及线条大小 5.二次贝塞尔曲线 6.三次贝塞尔曲线 <!doctype html> ...
- nginx解决502错误
添加一个域名绑定,突然服务器就挂了.由于是接受项目,没看过服务器配置.结果nginx和mysql 都跑不起来. 平滑启动nginx失败. 检查/usr/local/nginx/sbin/nginx - ...
- UIImage图片转NSData
在Iphone上有两种读取图片数据的简单方法: UIImageJPEGRepresentation 取UIImage的JPEG格式的NSData UIImagePNGRepresentation. ...
- DataTables warning 错误警告
今天使用 Charisma 框架的 jquery datatable 插件时出现如下错误: 搜索才发现 DataTables 目前不支持有单元格合并的表格.而且只要单元格数目不同就会有错误,不能使用搜 ...
- USB 3.1 Type-C
[時報記者任珮云台北報導]微軟.英特爾.蘋果今年將新款PC介面升級至USB 3.1規格,Wintel陣營今年新款PC產品亦將全面採用USB 3.1介面,里昂證出具最新的報告指出,在新趨勢帶動下,台廠的 ...
- css案例学习之盒子模型
定义:每个盒子都有:边界.边框.填充.内容四个属性: 每个属性都包括四个部分:上.右.下.左:这四部分可同时设置,也可分别设置:里的抗震辅料厚度,而边框有大小和颜色之分,我们又可以理解为生活中所见盒子 ...
- CSS制作出绚丽燃烧的火狐狸
From here:http://www.webhek.com/firefox-animation/ ozilla在移动世界大会上宣布它的火狐操作系统(Firefox OS)的同时,也宣布了它的合作伙 ...
- uva 193 Graph Coloring(图染色 dfs回溯)
Description You are to write a program that tries to find an optimal coloring for a given graph. Col ...