js面向对象和PHP面相对象
Js面向对象:
类 :具有相同的特征的一些对象的集合。
对象 :具体到某一个事物了都可以叫作对象。
类 :通过function 定义类 所以在js里类的本质是函数,
类的标志 首字母大写 函数内部使用this 调用函数是使用new关键字
1.类和函数天生有两个属性是prototype和__proto__
Prototype又是一个对象天生有一个constructor的属性,属性值是函数和类本身
2.普通对象天生有一个__proto__的属性,这个属性是对象,指向他的父类。
引用关系:
function A(){}
A.prototype.fn=function(){}
A.prototype=function(){
fn:function(){}
}
这两者有什么区别?
前者不会改变原有的引用关系,而后者会改变原有的引用关系。
拷贝:浅拷贝,深拷贝
Php面向对象
1.创建类:class Person{}
2.创建对象:$p=new Person;
3.成员的添加
添加成员需要 三个修饰符
Public 公开的 定义公共的属性和方法,类的外部,类的内部,子类都可以使用
protected 受保护的 定义受保护的属性和方法 只能在类的内部和子类里使用
Private 私有的 定义私有的属性和方法 只能在自身的类里使用
方法成员如果前面不加修饰符 默认是public
4.成员调用使用->符号
使用成员属性和方法的时候 属性和方法前面不带$符
5 .特殊对象$this 指向实例化的对象,如果类的方法里想使用类的其他属性和方法得需要使用$this对象
6.构造方法function __construct() 构造函数在new实例化的时候系统会自动调用
7.析构方法
我们每次new实例化,系统就会给这个对象分配一个内存空间,如果不销毁,系统压力会很大,系统有一个析构方法 __destruct 对象实例化之后系统会自动调用。内存销毁的原则是先进后销
先销毁$p1的
8.成员赋值
9.继承 extends
10.常量
类中常量 使用const关键字定义常量,常量在定义和使用的时候不能带$符。
使用常量的时候不能用$this 使用范围修饰符 :: 前面还是这个类名或self (self只限在类内代替类名,类外还是只能用类名)
子类中使用常量的话使用 parent
11.静态变量 在变量前加上关键字 static 静态属性 不能使用->访问了,使用类名::$变量名;
12.重载 覆盖
子类继承父类的方法时,如果子类有和父类同名的方法,从父类那继承的方法就会被覆盖掉,这个就叫重载。
如果父类的方法前面加上final 则子类无法重载父类的方法,就会报错