面向对象

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

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)调用类中的静态属性,静态方法,以及常量。

以上是关于面向对象的主要内容,如果未能解决你的问题,请参考以下文章

224 面向对象编程介绍,面向过程与面向对象

面向对象-面向对象和面向过程的区别

面向对象分析与设计面向对象设计包括哪些内容

面向对象

面向过程面向对象及面向对象的三大特征

Python面向对象学习 1 (什么是面向对象,面向对象的应用场景)