php面向对象编程基本实践:(了解类,类到对象的实例化,构造和析构,对象的引用);

  类的概念:

  物以类聚,把具有相似特性的对象对垒到一个类中

  类定义了这些相似对象拥有的相同的属性和方法

  类是相似对象的描述,成为类的定义,是该类对象的蓝图或者原型

  类的对象称为一个类的实例、

  类的属性和方法统称为类成员

  实例化的概念、类的定义和调用

  类的实例化就是通过类的定义创建一个对象

  类的定义以关键字class开始,后面跟着这个类的名称。类的命名通常每个单词的第一个字母大写,以大括号开始和结束

  类的实例化为对象时使用关键字new,new之后紧跟类的名称和一对括号

  对象中得成员属性和方法可以通过->符号来访问

  构造函数

  默认构造函数在对象被实例化的时候自动调用 (在所有的属性后面写 __construct方法,自动被调用);

  $this是Php里面的伪变量,表示对象本身。可以通过$this-> 的方式访问对象的属性和方法。表示变量自身,(谁调用就指谁)

  每一次用new实例化对象的时候,都会用类名后面的参数列表调用构造函数

  data_default_timezone_set("PRC");在PHP头部设置默认时区;设定用于所有日期时间函数的默认时区

  析构函数

  destruct 析构函数关键字(在程序执行到最后时会自动调用);;

  function destruct(){} 析构函数,与构造函数不同的是,构造函数必须在new实例化对象的时候才会被调用

  析构函数是实例化对象在所有程序运行完结束才调用析构函数的,而且是根据实例化对象后入先出的原则,除非在执行过程中触发了析构函数,会立即调用析构函数

  把实例化变量设置为空NULL可以立即调用析构函数(立即触发析构函数),(前提:实例化的对象没有引用且不会再被使用,设置NULL时才会被立即执行析构函数;)

  在实例化一个对象并且访问成员属性,再实例第二个对象,再继续访问成员属性,这样析构函数也不会立即触发,直到程序执行结束(就是到末尾啦)

  当一个类被实例化,不再引用时会自动调用析构函数

  析构函数通常被用于清理程序使用的资源。比如程序使用了打印机,那么可以在析构函数里面释放打印机资源。

  自总:类的每个实例化都会执行一次构造和析构函数,PHP程序执行结束后按照类创建的实例化对象后入先出的原则依次调用该类的析构函数,除非在执行过程中触发析构函数会立即调用析构函数。

  构造和析构函数必须是类实例化后才会执行;

  对象的引用

  当对象的所有的引用全部设为 null 时才会调用 __destruct()函数

  $james=new NbaPlayer('params') ;

  $james1 = $james; //相当于复制出来多一个引用,两者是独立的两个引用。

  $james2 = &$james; //相当于为james取一个别名,两者其实是一体的,只是有两个名字。

  php面向对象编程高级实践:(继承、访问控制、Static静态关键字、重写、Final、接口、多态、抽象类)

  面向对象--继承

  提取想同的属性和方法汇总成一个大的class类,然后让子类对象继承想同的属性和方法,在子类的对象上可以直接访问父类中定义的方法和属性

  php中可以用extends关键字来表示类的继承,后面跟父类(也叫基类)的类名。

  php中extends后面只能跟一个类的类名,这就是php的单继承原则。

  父类中定义的属性和方法,可以通过$this来访问使用。

  重写(Overwrite):

  一旦子类修改了父类的属性和方法,就按照子类修改之后的功能执行。

  访问控制:

  面向对象三种访问权限

  public 自身 其子类 其他类

  protected 其自身以及其子类

  private 其自身

  private不能被子类访问,为了访问私有元素:

  可以定义getPrivate函数与setPrivate函数进行控制

  静态成员Static

  定义时在访问控制关键字后添加 static 关键字即可

  (访问控制关键字:public. protected. private)

  1.静态属性用于保存类的公有数据

  2.静态方法里面只能访问静态属性

  3.静态成员不需要实例化对象就可以访问,是全局的,修改既是全局修改。如果没有定义Static,实例化的修改则是独立的。

  静态成员不需要创建对象就能访问,$this要在对象中才能使用,因此。。。

  静态方法和属性定义时都要使用static关键字;访问静态属性,必须在::后加$ ;

  static 方法内部不能使用$this获取static属性而是要用self:: 或static::或parent:: ;

  即:

  (当前类中)静态方法里面(只能访问静态成员属性)使用静态成员时用self/static::+成员名

  静态方法里面使用父类中的静态成员时用parent::+成员名

  外部访问静态方法或静态成员属性时用类名+::+方法名/成员属性名(不是静态的属性和方法不能这样访问;)。

  Final成员;(PHP5之前不支持)

  重写时参数不一定要跟父类完全一致,只要方法名一致就可以被重写

  有关键字final的方法不可以重写,有final关键字的类不可以被继承

  数据访问的补充:

  parent关键字可以用于调用父类中被子类重写的方法; self关键字可以用于访问类自身的成员方法,也可以用于访问自身的静态成员和类中定义的常量;但不能用于访问类自身的属性;使用常量的时候不需要再常量名称前面加$符号;(const abc="在类中定义常量的方法") static关键字用于访问了自身定义的静态成员,访问静态成员时需要加$符号;属性 方法 备注

  $this -> $ 动 静、动 无

  self:: const、静 静、动 可访问父类const,访问静态属性要在前加$符号

  parent:: const、静 静、动 重写的方法中调用父类同名的方法,另同下

  static:: const、静 静 访问静态属性要在前加$符号

  静态、动态的属性和方法都可以被重写;

  复制代码

  接口 interface

  接口继承关键字implement ;

  类的方法必须有实现,接口的方法必须为空。

  一个类可以继承多个接口: class A implements B,C{}

  接口继承接口的关键字也是extend;子类必须要实现所有接口的方法;接口不能创建自己的对象。

  类可以接多个接口,接口可以继承接口,接口所有方法默认public,具体实现在类中实现,接口的方法为空。接口中有几个方法,子类中必须实现几个方法,这就是接口的作用,能统一取名;

  instanceof 用来判断某个对象是否实现了某个接口,可以风险规避。

  多态

  对于同一个接口里面的方法,可以被多个类实现,这就是多态。接口主要是为了实现多态。

  抽象类

  接口里面的方法都是没有实现的,而类里面的方法都是有是实现的,那么抽象类就是允许类里面既有实现的也可以没有实现的。

  继承抽象类的共有方法和抽象类方法; 关键字用extends;有只能继承一个抽象类;

  php简直就是java和C++面向对象混到一块的,我都凌乱了,几股真气乱窜,分不清了

  abstract 就是interface和extends的结合

  魔术方法

  如 创建一个MagicTest类的实例

  $obj=new MagicTest();

  construct(), destruct() ;

  tostring(); Echo $obj; 会在把对象转换为string的时候自动调用

  invoke(); $obj(4); 会在把对象当做一个方法调用的时候自动调用

  call() ; 当对象访问不存在的方法名称时,此方法自动调用。

  ①调用示例:public function call($name,$argument){}

  ②注意:访问控制关键字必须为public;必须有两个参数:对象访问的方法名称($name)、方法包含的参数($argument,数组)。

  callStatic() ; 当对象访问不存在的方法名称时,此方法自动调用。注意同上

  call()和)callStatic()在PHP里面也被称为方法的重载(overloading)。通过这两个方法可以实现同一个方法的名称的调用可以对应不同的方法实现。

  属性的重载get(),set(),isset(),unset(),empty()

  get(),set(); $obj->name = "Name Value";在给不可访问的属性读取和赋值时会被分别调用;

  isset(); isset($obj->name) 对不可访问属性调用isset()和empty()时,会触发isset()魔术方法

  注意isset和empty不是相反的关系,isset判断的是值是否被定义过,empty认为没定义过的返回true

  unset();对不可访问属性调用unset时,调用unset;

  不能echo '$obj->name is empty?' .unset($obj->name);

  clone; 可形成新的对象并调用类里面的clone()方法;

  clone复制出来的对象与原对象互不干扰,并且可以用__clone()给复制出来的结果重新赋值。

  implode(,$arr)将数组用","分隔开输出

  面向对象

  对内是高内聚,对外是低耦合。面向对象的设计追求:高内聚低耦合

  魔术方法分三组:

  1,toString(); invoke();

  2,call(); callStatic();

  3,get();set();isset();unset(); __clone();

  PHP面向对象的概念也就这么多,其实和前端的面向对象大同小异,更接近ES6面向对象的思想,并不太难。但要结合实际运用在项目中,才能发挥最大的作用。(来源:程序员)

PHP面向对象初中高级之由浅入深的更多相关文章

  1. PHP面向对象编程 对象的基本概念 PHP面向对象的基本实践 PHP面向对象的高级实践 PHP面向对象的特殊实践

    再次梳理一下面向对象编程的要点. 此文是以php为例,但思想是通用的. 总结的PHP面向对象编程笔记 对象的基本概念 对象的基本构成 对象包含两部分 一.对象的组成元素 是对象的数据模型,用于描述对象 ...

  2. JAVA(一)JAVA基础/面向对象基础/高级面向对象

    成鹏致远 | lcw.cnblog.com |2014-01-23 JAVA基础 1.开发环境搭建 JAVA程序的执行流程 JAVA命令->要使用一个*.class文件(类文件)->通过c ...

  3. 老男孩Linux.shell.RHCE运维初中高级50G附解压密码

    学习Linux,好的教程.使学习事半功倍! 老男孩Linux.shell.RHCE运维初中高级 下载地址: http://pan.baidu.com/s/1hsQOb2W 密码: h4hs 解压密码: ...

  4. 大数据技术之_16_Scala学习_06_面向对象编程-高级+隐式转换和隐式值

    第八章 面向对象编程-高级8.1 静态属性和静态方法8.1.1 静态属性-提出问题8.1.2 基本介绍8.1.3 伴生对象的快速入门8.1.4 伴生对象的小结8.1.5 最佳实践-使用伴生对象解决小孩 ...

  5. Python面向对象编程高级特性

    ***这里还是根据网上资料,主要是廖雪峰老师的教程学习的笔记,主要介绍python面向对象的高级特性,笔记不全,只是记录自己觉得容易出错的地方*** 1.python作为一种动态语言,他的动态绑定机制 ...

  6. javascript面向对象创建高级 Web 应用程序

       目录 JavaScript 对象是词典 JavaScript 函数是最棒的 构造函数而不是类 原型 静态属性和方法 闭包 模拟私有属性 从类继承 模拟命名空间 应当这样编写 JavaScript ...

  7. PHP初中高级学习在线文档下载

    收集了一些框架的学习文档与手册,视频教程,给大家带来了更多的方便,只要收藏与保存于百度云盘就好了,省去了网上到处寻找的时间!大家有需要就收藏保存起来吧! 如果不能下载请到群内获取新的下载地址 QQ群 ...

  8. python学习笔记1 -- 面向对象编程高级编程1

    说起高级其实也就是些基础的东西,但是活用和熟用肯定会大幅度提升代码质量 首先要记录的是面向对象的灵活性,及如何去控制其灵活性,她允许你在实例中新增属性和方法,允许你给类新增属性和方法,也支持在定义类时 ...

  9. Python 面向对象之高级编程

    7.面向对象高级编程 7.1使用__slots__ python动态语言,new 对象后绑定属性和方法 Tip:给一个实例绑定的方法,对其他对象无效.可以通过对class绑定后,所有对象可以调用该方法 ...

随机推荐

  1. 论文参考文献中J、M等是什么意思

    最近不务正业的写论文,记录下常见的文献标示 国家期刊出版格式要求在中图分类号的下面应标出文献标识码,规定如下: 作者可从下列A.B.C.D.E中选用一种标识码来揭示文章的性质: A—理论与应用研究学术 ...

  2. apache源码安装

    1.apr和apr-util,下载地址: http://apr.apache.org/download.cgi yum install gcc yum install libtool yum inst ...

  3. 20155305乔磊2016-2017-2《Java程序设计》第五周学习总结

    20155305乔磊2016-2017-2<Java程序设计>第五周学习总结 教材学习内容总结 try.catch 1.求平均数程序示例 import java.util.Scanner; ...

  4. presto 0.166概述

    presto是什么 是Facebook开源的,完全基于内存的并⾏计算,分布式SQL交互式查询引擎 是一种Massively parallel processing (MPP)架构,多个节点管道式执⾏ ...

  5. python3.4学习笔记(五) IDLE显示行号问题,插件安装和其他开发工具介绍

    python3.4学习笔记(五) IDLE显示行号问题,插件安装和其他开发工具介绍 IDLE默认不能显示行号,使用ALT+G 跳到对应行号,在右下角有显示光标所在行.列.pycharm免费社区版.Su ...

  6. C/C++之Memcpy and memmove

    memcpy与memmove的目的都是将N个字节的源内存地址的内容拷贝到目标内存地址中. 但当源内存和目标内存存在重叠时,memcpy会出现错误,而memmove能正确地实施拷贝,但这也增加了一点点开 ...

  7. android 简单的控件前端代码

    /Hello_word/res/layout/activity_main.xml Graphical  Layout/activity_fullsreen.xml(layout/) 代码与设置界面互换 ...

  8. 关于STM32 MDK中USE_STDPERIPH_DRIVER问题的解释

    初学STM32,在RealView MDK 环境中使用STM32固件库建立工程时,初学者可能会遇到编译不通过的问题.出现如下警告或错误提示: warning: #223-D: function &qu ...

  9. 详解C中的volatile关键字【转】

    本文转载自:http://www.cnblogs.com/yc_sunniwell/archive/2010/06/24/1764231.html volatile提醒编译器它后面所定义的变量随时都有 ...

  10. http://www.360doc.com/content/18/0406/16/15102180_743316618.shtml

    http://www.360doc.com/content/18/0406/16/15102180_743316618.shtml