zoukankan      html  css  js  c++  java
  • 面向对象

    一,传统的面向过程

    将要完成的工作,分为若干个步骤,然后按步骤一步一步完成,最终完成整个工作

    二,面向对象

    将要完成的工作拆分为一个一个对象的任务,每一个对象独立完成自己的任务,最终完成整个工作

    三,面向对象的基本概念

    1,类与对象

    类:用于描述某一些具有共同特征的物体的概念,是某一类物体的总称  例如:人类

    一个类所具有的共同特征包括2个方面的信息:属性和方法

    对象:指一个具体的物体,该物体隶属于某个类 例如:张三这个人  就属于人类

    对象属于类,没有类就不能有对象

    <?php
        //定义一个类
        class person{//类中的属性(就是变量)
        var $name = '张三';
        var $sex = '男';
        var $age = '22';
        //类中的方法(就是函数)
        function personFun(){
            echo '函数输出';
         }
         //类中有一些常量(类常量)
         const PI = 3.14;  
        }
    

    可见类就是将一些变量和一些函数及一些常量用一个名字(类名)包起来的集合体,这些属性(变量),函数和常量隶属于该类,并且只能由该类及其创建出来的对象来使用

    2,面向对象的语法

    a,定义类:定义属性(变量) 定义方法(函数) 定义常量(类常量)

    b,创建类的对象:$person1 = new person();person是上面代码的类名,此时$person1就是一个对象

    c,使用对象

    使用其属性:属性就是变量,也就是使用其变量

    使用其方法:使用其函数

    使用其常量

    <?php
    //定义一个类
    class person{
    //类中的属性(就是变量)   var $name = ''; var $sex = ''; var $age = ''; //类中的方法(就是函数) function personFun(){ echo '姓名:'.$this->name.'<br/>性别:'.$this->sex.'<br/>年龄:'.$this->age; } //类中有一些常量(类常量) const PI = 3.14; } $person1 = new person(); $person1->name = '张三'; $person1->sex= '男'; $person1->age= '22'; $person1->personFun();

     输出结果:

    四,创建对象的基本形式

    方式一,$对象名 = new 类名();  例如:$person1 = new person();

    方式二:可变类名:

    例如上面的代码:$people = 'person'; $person2 = new $people();

    其中:方式以中的$person1和方式二中的$person2是一样的效果

    方式三,$对象名 = new self;  self指类本身,该方法只能在类内部方法中使用

    方式四:通过对象创建对象$person1 = new person(); $person3 = new $person1;

    五,对象的传值(默认是值传递)

    值传递

    引用传递

    五,类中的成员

    属性 方法 类常量

    1.一般属性

    属性就是放在一个类中的变量

    定义形式:

    形式一: var $v;//定义不赋值

    形式二:var $v = 2;//定义并赋值,该值只能是一个直接量(常量),该值不能是计算表达式 或是变量

    形式三:public $v;

    形式四:public $v = 2;//var是public的别名,正式用public更好

    2,一般方法

    a,方法的定义和php中的方法定义是一样的

    方法前面可以加修饰符:public  protected private,省略不写时默认为public

    b,方法中的$this关键字

    $this是一个伪对象,代表当前所属类的当前对象

    总结:类是定义好的某些对象的模型

    对象是根据模型所创建出来的具体物体,一个对象有哪些属性(数据),是由该类来决定的,一个对象可以做那些事情(方法),也是由该类决定的

    c,一个系统函数get_class(对象)

    作用:获取某个对象的所属类型 结果是一个类名字符串

    六,静态属性

    定义静态属性时,前面要加关键字static

    静态属性和一般属性的差别:一般属性属于该类的某个具体对象,每个对象的属性的值不一定相同

    静态属性属于类本身,其实他就是该类所有对象的共有数据

    1,静态属性语法 类名::$静态属性名;

    七,静态属性

    方法前面加static

    语法:类名::静态方法名();

    如果通过类名来调用静态方法,方法中不能出现$this,即$this在静态方法中不能使用

    静态方法中不能调用非静态方法

    self:代表当前类:只能在某个类的某个方法内部使用

    八,构造方法  构造方法是“创建”对象的时候会自动调用。

    构造方法是类中的一个特殊方法,其作用是在实例化一个对象的同时,给对象的属性赋值,使之一创建完成,就具有了本身的特有数据(构造方法本身就存在类中)

    1.构造方法名和类名相同(php4版),php5版的构造方法名和类名可以相同,也可以是__construct()

    2.构造方法没有返回值

    3.构造方法的主要作用是完成对新对象的初始化,并不是创建对象本身

    4.一个类有且只有一个构造方法,在php5后虽然__construct()和类名()可以共存,但实际只能使用一个

    5.如果没有给类自定义构造方法时,则该类使用系统默认的构造方法

    6,如果一个类中定义了构造方法,则实例化该类是就会调用该方法,且实例化时的参数要跟构造方法的参数一致

    7.构造方法的默认修饰符为public

    九,析构方法 析构方法是“销毁”对象的时候会自动调用。

    语法:function __destruct(){}

    显示销毁:①使用unset(对象名)

      ②$对象名 = null;

      ③$对象名 = 'abc';

    隐藏销毁:程序执行完毕后,这个对象被系统销毁

    通常是在销毁对象时,来清理数据

    析构方法通常不需要去定义

    析构方法不能调用

    析构方法不能有形参

    析构方法中可以用于清理一些在php代码结束后不能清理的数据,如生成的文件。

     十,类的继承

    某个类A具有的特征,另一个类B,具有A类所有特征,并且还具有自己的特征,这样B类继承了A类

    语法:class A{}

    class B extends A{}

    十一,访问修饰符

    public:公共的 protected:受保护的 private:私有的

    public:用该修饰符的成员可以在任何位置访问,某个类的内部,某个类的具有继承关系的子类内部,某个类的外部

    protected:在当前类或具有继承关系的上下级的类中访问

    private:只能在所在类中访问

    十二,重写 override

    就是将父类继承下来的属性或方法重新定义

    基本要求:下级的访问权限应不低于上级的访问权限

    上级:public 下级:public

    上级:protected 下级:protected,public

    上级:private 下级:private protected,public

    私有属性和私有方法的重写问题:私有属性和方法不能覆盖,但其实子类可以定义跟父类私有的同名属性和方法,只是当作自己的的新的属性和方法来看待,方法的参数必须一致

    构造方法的重写:构造方法重写时参数可以和父类不一致

    最终类 final class

    如果希望某个类不被继承,则将其声明为最终类:final class 类名{}

    最终方法:final method

    一个方法,可以被下级类进行重写,如果这个方法不希望被下级类覆盖,则将其声明为最终方法:final function 方法名(){}

    十三,设计模式

    所谓设计模式就是解决一些问题的做法,是一种认为较好的经验总结.面对不同的问题,可能会有不同的解决方法,此时可以称为不同的设计模式

    1.工厂模式

    在实际应用中我们总是需要实例化很多类以得到对象

    我们可以设计出一个工厂(其实就是类),该工厂的作用就是为人们生产各种对象.这种工厂只要指定类名,就可以获取一个该类的对象

    class factory{
        static function getInstance($className){
            $obj = new $className();
            return $obj;
    }
    }
    $obj1 = factory::getInstance('A');//获取类A的一个对象
    $obj2 = factory::getInstance('B');//获取类B的一个对象
    

     2.单例模式

    需求:对于某些类,在使用他的时候,从头到尾(程序运行开始到结束),都只需要一个对象,就可以完成所有任务

    单例:某个类,只允许创建出一个对象,即使去进行多彩创建,也只能得到一个对象

    例如:$obj1 = new A();

    $obj2 = $obj1;// 此时$obj2指向了跟$obj1同样的对象

    $obj3 = new A();//此时$obj3是另外一个新的对象

    在php 中一个对象可以使用clone运算符进行克隆,会生成一个新的对象

  • 相关阅读:
    Android的数据存储
    Servlet第一天
    JavaScript高级程序设计读书笔记(3)
    Interesting Papers on Face Recognition
    Researchers Study Ear Biometrics
    IIS 发生意外错误 0x8ffe2740
    Father of fractal geometry, Benoit Mandelbrot has passed away
    Computer vision scientist David Mumford wins National Medal of Science
    Pattern Recognition Review Papers
    盒模型bug的解决方法
  • 原文地址:https://www.cnblogs.com/wfc139/p/9135231.html
Copyright © 2011-2022 走看看