PHP面向对象初中高级之由浅入深

  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面向对象的思想,并不太难。但要结合实际运用在项目中,才能发挥最大的作用。(来源:程序员)

原文地址:https://www.cnblogs.com/pengpeng1208/p/9110597.html

时间: 2024-11-08 23:09:09

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

Python面向对象编程高级特性

***这里还是根据网上资料,主要是廖雪峰老师的教程学习的笔记,主要介绍python面向对象的高级特性,笔记不全,只是记录自己觉得容易出错的地方*** 1.python作为一种动态语言,他的动态绑定机制允许在运行过程中动态的给class或者对象实例添加方法和属性,这个在静态语言中比如java是很难做到的: 1)动态绑定属性: 2)动态绑定方法 给一个实例绑定的方法对于其他实例和类都是不可见的:(这里也说明给一个实例动态绑定方法必须用MethodType(func, instance)) 但是给类绑

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

 目录 JavaScript 对象是词典 JavaScript 函数是最棒的 构造函数而不是类 原型 静态属性和方法 闭包 模拟私有属性 从类继承 模拟命名空间 应当这样编写 JavaScript 代码吗? 展望 最近,我面试了一个有五年 Web 应用程序开发经验的软件开发人员.四年半来她一直在从事 JavaScript 相关的工作,她自认为 JavaScript 技能非常好,但在不久之后我就发现实际上她对 JavaScript 知之甚少.话虽这样说,但我确实没有责备她的意思.JavaScrip

Python自动化开发课堂笔记【Day08】 - Python进阶(面向对象的高级用法,网络编程)

面向对象的高级用法 1. __str__ 只要执行打印对象的操作,就会触发该对象类中的__str__方法(也就是对象的绑定方法)它是一种默认的方法,默认的打印输出为<__main__.Foo object at 0x003EE350>,但是如果将该绑定方法在类中重写的话,要求必须有以字符串类型的返回值,返回形式可以自己设定. class Foo: def __init__(self,name,age): self.name = name self.age = age def __str__(s

java 第十一天 面向对象(高级篇之接口、对象的多态性,instanceof)

接口的基本概念:接口的访问权限是public,关键字interface,子类通过implements关键字实现接口.一个子类可以同时实现多个接口. 对象的多态性: 两种体现形式:(1)方法的重载与覆写.(2)对象的多态性. 对象的多态性分两种: (1)向上转型:子类对象--→父类对象 (2)向下转型:父类对象--→子类对象 java中可以使用instanceof关键字判断对象到底是哪个类的实例 java 第十一天 面向对象(高级篇之接口.对象的多态性,instanceof),码迷,mamicod

7.面向对象编程高级

什么是类和对象 class Garen: camp='Demacia' def __init__(self,nickname,aggresivity,life_value): self.nickname=nickname self.aggresivity=aggresivity self.life_value=life_value def attack(self,enemy): print('is attacting') #类的第一个功能:实例化 g1=Garen('草丛伦',82,100) #

Python 面向对象之高级编程

7.面向对象高级编程 7.1使用__slots__ python动态语言,new 对象后绑定属性和方法 Tip:给一个实例绑定的方法,对其他对象无效.可以通过对class绑定后,所有对象可以调用该方法 如果我们现在只有实例可以添加属性,使用__slots__,只允许对Student实例添加name和age属性, 添加其他属性报错 class Student(object): __slots__ = ('name', 'age') # 用tuple定义允许绑定的属性名称 该限定只对当前对象起作用,

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

收集了一些框架的学习文档与手册,视频教程,给大家带来了更多的方便,只要收藏与保存于百度云盘就好了,省去了网上到处寻找的时间!大家有需要就收藏保存起来吧! 如果不能下载请到群内获取新的下载地址 QQ群 4915800 点击链接加入群[PHP-学习-php交流]: https://jq.qq.com/?_wv=1027&k=5Rryl8h 在线学习文档 ThinkPHP3.2手册:http://t.cn/RhVxksn ThinkPHP5.0手册:http://t.cn/RqYDt0h CodeIg

JavaScript 面向对象(三) —— 高级篇

JavaScript 面向对象(一) —— 基础篇 JavaScript 面向对象(二) —— 案例篇 一.json方式的面向对象 首先要知道,js中出现的东西都能够放到json中.关于json数据格式这里推荐一篇博客:JSON 数据格式 先看下json创建的简单对象:相比基础篇中的构造函数.原型等的创建方式,json方式简单方便:但是缺点很明显,如果想创建多个对象,那么会产生大量重复代码,不可取. JSON方式适用于只创建一个对象的情况,代码简介又优雅. 1 <!DOCTYPE html>

js面向对象编程-高级内容

JavaScript面向对象 一.为每个对象动态添加属性或方法 功能:返回对象类型原型的引用 prototype的使用 格式:class.prototype 场景: 比如说:A写了一个类,交给B,B在使用时发现A写的类的功能有所欠缺,但是B没有权力改写A的文件,这时该怎么办? Function Person(name1,age1){ This.name=name1; This.age=age1; } Var p1=new Person(‘zhangsan’,30); p1.sex=’男’ B认为