php

Js面向对象

具有相同的特征的一些对象的集合。

对象 具体到某一个事物了都可以叫作对象。

通过function 定义类 所以在js里类的本质是函数,

类的标志  首字母大写   函数内部使用this  调用函数是使用new关键字

1.类和函数天生有两个属性是prototype__proto__

Prototype又是一个对象天生有一个constructor的属性,属性值是函数和类本身

2.普通对象天生有一个__proto__的属性,这个属性是对象,指向他的父类。

原型链

继承

引用关系

 

这两者有什么区别?

前者不会改变原有的引用关系,而后者会改变原有的引用关系。

拷贝 浅拷贝 深拷贝

Php的面向对象

1类的创建   class 创建类

 

2对象的创建 使用new 关键字

 

3成员的添加

添加成员需要 三个修饰符

Public 公开的   定义公共的属性和方法,类的外部,类的内部,子类都可以使用

protected 受保护的 定义受保护的属性和方法  只能在类的内部和子类里使用

Private 私有的 定义私有的属性和方法  只能在自身的类里使用

方法成员如果前面不加修饰符 默认是public

4成员调用使用->符号

 

使用成员属性和方法的时候 属性和方法前面不带$

 

5 特殊对象$this 指向实例化的对象,如果类的方法里想使用类的其他属性和方法得需要使用$this对象

 

6.构造方法function __construct()  构造函数在new实例化的时候系统会自动调用

 

7. 析构方法  

我们每次new实例化,系统就会给这个对象分配一个内存空间,如果不销毁,系统压力会很大,系统有一个析构方法 __destruct 对象实例化之后系统会自动调用。内存销毁的原则是先进后销

 

8.成员赋值

 

9.php中的继承使用关键字 extends

 

10. 类中常量 使用const关键字定义常量,常量在定义和使用的时候不能带$符。

使用的时候不能用$this 使用范围修饰符  :: 前面还是这个类名或self

 

如果子类向访问父类中的常量 使用parent::常量名

 

11 静态变量  在变量前加上关键字 static 静态属性 不能使用->访问了,使用类名::$变量名;

 

12.重载 覆盖

子类继承父类的方法时,如果子类有和父类同名的方法,从父类那继承的方法就会被覆盖掉,这个就叫重载。

如果父类的方法前面加上final 则子类无法重载父类的方法,就会报错。

 

13

 

4.9面向对象

1. 定义类和实例化对象

使用关键字 class 定义类 使用new 实例化对象

 

2.类成员的添加和访问

类成员 有属性   方法   常量

添加属性 需要使用范围修饰符 public  protected   private

访问属性的时候变量名不带$符。

作用范围 类外 类内  子类 public都可以访问

Protected 在类内和子类内访问

Private只能在自己的类内访问

添加方法 如果方法前不带修饰符 则默认是public

添加常量 使用关键字 const 常量名 常量名不带$

访问常量  类名::常量名   :: 范围解析符

 

3.类内部对象$this 和内存原理

$this 他是一个对象 指向实例化的那个对象

 

当我们new实例化的时候,系统会给这个对象分配一个内存空间,内存空间分一个栈内存,一个堆内存,将变量存在栈里,将代码块存在堆里,然后将堆的内存地址指向栈中的变量,如果再给这个栈中的变量赋值引用数据类型,那么这个内存地址就会被更改。

 

4.

 变量a和变量p都指向同一个引用地址,二者是同一个对象,一变都变。思考:如果让二者是两个不同的对象,改变a但是p不跟着改变。需要使用对象克隆。clone

通过关键字clone 来复制一个一模一样的对象,但是二者不是同一个对象

 

5.构造函数和析构函数

构造函数:我们在申明类的时候就自然存在,当用new实例的时候,这个函数会自动调用

我们也可以人为去写些自己的东西

 

析构函数:用于销毁new实例化的内存,如果不销毁内存,系统性能会大大降低。

New实例以后,这个函数也会自动调用,销毁原则是先入后出

 

6.静态成员

静态成员的添加

在成员属性 成员方法 前面加上static关键字就可以了

静态成员的访问

第一中在类的内部方法中访问

 

在类的外部访问

 

7.面向对象的三大特征

封装:对外只告诉你如何操作,内部结构不需要你知道。

对外只提供可操作的接口(方法),对内的数据操作不可见

 

继承

子类可以继承父类的属性和方法,但是有限继承,public protected private 修饰的属性可以继承 protected public 修饰的方法 子类可以继承  父类的常量也可以继承。

 

多态:php没有多态,因为php是弱类型语言,不会对变量提前进行类型申明,但是有重载

重载 父类和子类 方法相同 子类会覆盖父类的方法

8.关键字parent

在继承中的子类,有这个parent。访问父类的常量,父类的方法,父类的静态属性,属性成员不能访问。

 

9.final关键字  不可重载的

如果写在类的前面 表明这个类不能被继承

 

如果写在类的方法前面和属性前面 说明这个方法和属性也不能被重载

 

10 abstract 代表抽象类

如果项目经理需要对所有的子类进行规范,就是说有些成员必须有,且必须使用那些名字。

就需要使用抽象类这个概念。

1.抽象类不能被实例化

2.如果一个类里面有一个方法被申明为抽象类了,这个类就得申明为抽象类

3.只要这个方法被声明为抽象方法了,就不能写函数体。将函数后面{}去掉,函数体由子类去实现

4.在继承一个抽象类的时候,子类必须定义父类中的所有抽象方法。不是抽象方法子类可以不去定义

 

11.接口interface

接口的用途和抽象类差不多,都是为了写一些规范

1. 使用interface关键字定义接口,接口在方法都是空的没有函数体。

2. 接口中所有方法都是public

3. 使用implements 这个操作符

4.一个类可以实现多个接口,接口和接口之间只要,隔开

5.接口和接口之间方法尽量不要重名,如果重名了,那么参数等要保持一致 

 

抽象类和接口的区别

1. 接口使用implements 而抽象类使用extends 实现

2. 接口中只能申明公有的方法  抽象类属性  常量 方法 都可以申明

3. 接口没有构造函数 抽象类有

4. 接口可以实现多个接口 但是抽象类只能继承一个

原文地址:https://www.cnblogs.com/xyangjie/p/10679397.html