前几天写了一篇关于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. KEIL MDK环境下uCOS-II在LPC17xx上的移植实例

    1. 知识准备 要想对ucos-ii的移植有较深的理解,需要两方面知识: (1)目标芯片,这里是lpc17xx系列芯片,它们都是基于ARMv7 Cortex-M3内核,所以这一类芯片的ucos-ii移 ...

  2. 全局键盘钩子(WH_KEYBOARD)

    为了显示效果,在钩子的DLL中我们会获取挂钩函数的窗体句柄,这里的主程序窗体名为"TestMain",通过FindWindow查找. KeyBoardHook.dll代码 libr ...

  3. 本地化SilverLight应用程序(多语言支持)

    原文 http://www.cnblogs.com/seaworm/archive/2010/11/30/1892325.html 利用资源文件(Resources File)使SilverLight ...

  4. opensatck 使用devstack在 laptop上的 网络配置

    http://docs.openstack.org/developer/devstack/guides/neutron.html Physical Network Setup In most case ...

  5. MyGui笔记(1)建立第一个工程

    记录下学习 MyGui的一些笔记,从建立第一个工程开始. 步骤: 1.右键MYGUI解决方案,添加→新建项目,选择“Win32 项目”,名称为:TestHello.下一步,勾选“空项目”. 2.设置工 ...

  6. IE 创建条件样式

    1.HTML 注释 <div id="header">Header Section</div> <!-- End Header Section Con ...

  7. linux 学习之九、Linux 磁盘与文件系统管理(2)

    原文地址:http://vbird.dic.ksu.edu.tw/linux_basic/0230filesystem.php#filesys 磁盘挂载与卸除 挂载Ext2/Ext3文件系统 范例一: ...

  8. js中调用mangeto的js翻译

    第一步: <script type="text/javascript"> Translator.add('英文','<?php echo this->__( ...

  9. JAVA布局管理器

    JAVA的界面布局原理:由于Java是跨平台语言,使用绝对坐标显然会导致问题,即在不同平台.不同分辨率下的显示效果不一样.Java 为了实现跨平台的特性并且获得动态的布局效果,Java将容器内的全部组 ...

  10. java——推断日期是否在今天之前

    这里说的日期是指字符串的日期格式,如"2014-10-15",我们要推断这个日期是否在今天之前,网上看到好多推断的方法,都是拿这个日期转换成Date对象 然后与new Date() ...