面向对象
Posted dengpu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象相关的知识,希望对你有一定的参考价值。
一、基础了解(面向对象:简称 OOP 是一种程序设置模式)
面向对象是一个思想,就是把解决问题的注意力集中到对象上,把所有相关的属性和方法封装到一个对象中
一般基础的编程都是面向过程的,涉及到大的网站的时候通常都采用面向对象的方法
面向对象基于面向过程但又不等同于面向过程,他是在面向过程的基础上,对涉及到的代码进行封装,然后调用,实现效果
类:通过class定义,首字母要大写
对象:是类的实例 通过new关键字,得到一个实例对象
二、优势
面向对象大大节省了代码的重用,减少了代码量
对象只是一种特殊的数据。对象拥有属性和方法。
三、特征
三大特征:封装、继承、多态
继承:通过继承,可以使子类获取到父类的属性和方法,从而能够提高代码的复用性,他不仅拥有父级的属性和方法,还有独属于他的属性方法
多态:不同的对象可以定义相同名称的方法,方法作用于所在的对象中。这种不同对象通过相同方法的调用实现各自行为的能力,被称之为多态。
四、面向对象中的this指向
在全局中,this指向window;
在绑定事件的是处理函数中,this指向事件源
在对象的方法中使用,this指向那个对象本身
在定时器中调用函数使用,this指向window
js
js继承
1、原型继承:将父类的实例对象赋值给子类的原型 私有的、公有的都继承为公有的。
function Person(name) this.name=name; Person.prototype.fn=function() console.log(1) var p1 = new Person(); p1.name="zhang" console.dir(p1) function Son() this.age=23; Son.prototype=p1; //将父类的实例赋值给子类的原型 var s1=new Son(); console.dir(s1)
2、call继承 call方法是函数/类天生自带的一个方法 将父类私有的继承为子类私有的。
function Person(name) this.name=name; Person.prototype.fn=function() console.log(1) var p1 = new Person(); p1.name="zhang" console.dir(p1) function Son() this.age=23; Person.call(this,"lisi") var s1=new Son(); console.dir(s1)
3、冒充对象继承: 将父类私有的和公有的都继承为子类私有的。使用for..in..
冒充父类继承 function Person(name) this.name=name; Person.prototype.fn=function() console.log(1) var p1 = new Person("zhang"); console.log(p1) for(var key in p1 ) console.log(key)
4、混合继承 私有继承为私有的,公有的和私有的再继承为私有 call继承和原型继承的结合
function Person() this.name="zhangsan" Person.prototype.fn=function() console.log(111) var p1=new Person; function Son() Person.call(this) //私有的继承为私有的 Son.prototype=p1; var s1=new Son; console.log(s1)
5、组和继承 私有的继承为私有,公有继承为公有
6、中间类继承
php实现继承:给子类使用extends关键字,让子类继承父类
注意事项:子类智能继承父类的非私有属性;子类继承父类后,可以直接使用$this调用;php只能单继承,不支持一个类继承多个类,但是一个类可以进行多层继承
class Person class Adult extends Person class Student extends Adult //student 类就同时具有了Adult类和Person类的属性和方法
* $this : PHP中的伪变量,表示自身的类
* __construct() : php中的魔术方法,构造函数,在实例化类时自动执行
* __destruct() : php中的魔术方法,析构函数,当类调用完成后自动执行
php的静态方法和普通方法的区别
同:都是存在于类内,只有一份
异:普通方法需要对象去调动,需要绑定$this 即,普通方法,必须要有对象,且用对象调动
而静态方法,不属于哪个对象,属于类,因此不需要去绑定$this. 即,静态方法,通过类名就可以调动.
php中通过访问修饰符给类添加成员
Public 添加的成员是公有的,在类内、类外、子类都可以访问
protected 受保护的,只能在类的里面和子类访问,类外面不能访问
private 私有的只能在类内访问
实例对象 通过 -> 访问类里面的成员,例:
class Person public $name = "zhangsan"; $zhang = new Person; echo $zhang ->name
对象 -> 获取属性时,属性前不需要加 $
构造函数 __constructor
析构函数
我们new实例的时候就是调用构造函数,函数调用的时候会调用内存空间
调用完后自动销毁销毁之前会自动调用 __destruce这个析构函数
析构函数不能带有任何的参数;
实例化对象及对象属性方法的调用:
$对象名 = new 类名(); //()可以不带
类外部调用属性和方法:
$对象名 -> $属性名; //使用->调用属性时,属性名不能带$符号
类内部调用属性和方法:
$this -> $属性名;
什么是构造函数?
构造函数是类中的一个特殊函数,当我们使用new关键字实例化对象时,相当于调用了类的构造函数。
构造函数有什么作用?
实例化对象时,自动调用,用于给对象的属性赋初值!
php中创用的几种操作符
① . 只能连接字符串; "".""
② => 声明数组时,关联键与值["key"=>"value"]
③ -> 对象($this new出的对象)调用成员属性,成员方法;
④ :: ①使用parent关键字,调用父类中的同名方法:parent::say();
②使用类名(和self)调用类中的静态属性,静态方法,以及常量。
以上是关于面向对象的主要内容,如果未能解决你的问题,请参考以下文章