前几天写了一篇关于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面向对象编程学习之高级特性的更多相关文章

  1. python面向对象编程学习

    python面向对象编程 基本概念理解 面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作 ...

  2. PHP面向对象编程学习之对象基础

    php虽然是一门学习起来非常简单的语言,但是这门语言也包含了对面向对象编程的支持.尤其是随着php5的发布,php对面向对象的支持有了很大的进步.最近学习了一下php的面向对象编程,不禁感慨,面向对象 ...

  3. Python之面向对象编程学习

    不知不觉,学到了python的面向对象编程思想.今天我们来讨论下面向对象编程的思想. 顾名思义,面向对象,就是面向于对象,这里所说的对象不是你现实生活中你的女朋友,你的老婆,你的爱人,在编程的世界里面 ...

  4. MapReduce编程实战之“高级特性”

    本篇介绍MapReduce的一些高级特性,如计数器.数据集的排序和连接.计数器是一种收集作业统计信息的有效手段.排序是MapReduce的核心技术,MapReduce也可以运行大型数据集间的" ...

  5. python 面向对象编程学习

    1. 问题:将所有代码放入一个py文件:无法维护 方案:如果将代码才分放到多个py文件,好处: 1. 同一个名字的变量互相不影响 2.易于维护 3.引用模块: import module 2.包:解决 ...

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

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

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

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

  8. JS面向对象编程学习

    学习目标:1.掌握JS中的类(原型对象)和对象.2.什么是成员变量和成员方法.3.掌握构造方法的使用.补充:关于双等号(==):1.如果等号两边都是字符串时,则比较内容是否相等2.如果等号两边是数字时 ...

  9. python 面向对象编程学习总结

    面向对象是个抽象的东西,概念比较多,下面会一一介绍. 一.类和实例 类(Class)和实例(Instance)是面向对象最重要的概念. 类是指抽象出的模板.实例则是根据类创建出来的具体的“对象”,每个 ...

随机推荐

  1. "Classifying plankton with deep neural networks" notes

    cross entropy loss is not quite the same as optimizing classification accuracy. Althougth the two ar ...

  2. 远程控制利器TeamViewer使用教程(图)

    TeamViewer是什么? 他是一款免费的可以穿透内网的远程控制软件,可以实现桌面共享,文件传送等功能,简单一点说就是和QQ远程协助一样,但是比QQ的远程协助功能更为强大. TeamViewer与木 ...

  3. 启动程序的c++方法

    #include <Windows.h> void main() { WinExec( "notepad.exe fitdata.txt", SW_SHOW ); // ...

  4. js,jQuery数组常用操作小结

    一.js中数组常用操作小结 (1) shift:删除原数组第一项,并返回删除元素的值:如果数组为空则返回undefined var a = [1,2,3,4,5]; var b = a.shift() ...

  5. jquery 实现导航栏滑动效果

    精简的代码实现导航栏滑动效果,实现详解: 1.滑块位置:通过父节点position=fixed,子节点position=absolute方式,实现子节点浮动: 2.导航栏居中:通过left=0px,r ...

  6. ACID:数据库事务正确执行的四个基本要素

    ACID,指数据库事务正确执行的四个基本要素的缩写.包含:原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持久性(Durability).一个支持事务(T ...

  7. HTML5新元素

    <figure> 标签规定独立的流内容(图像.图表.照片.代码等等). <figure> 元素的内容应该与主内容相关,同时元素的位置相对于主内容是独立的.如果被删除,则不应对文 ...

  8. zmud中文版_汉化补丁_汉化文件ZMUD破解

    ZMUD721中文版 http://pan.baidu.com/s/1mixwIoC

  9. HibernateDaoSupport的getSession()与HibernateTemplate的区别

    在 Spring+Hibernate的集成环境里,如果DAO直接使用HibernateDaoSupport的getSession()方法获取 session进行数据操作而没有显式地关闭该session ...

  10. HTTP 状态代码及其定义

    所有 HTTP 状态代码及其定义. 代码  指示  2xx  成功  200  正常:请求已完成.  201  正常:紧接 POST 命令.  202  正常:已接受用于处理,但处理尚未完成.  20 ...