• 面向对象


    一,传统的面向过程

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

    二,面向对象

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

    三,面向对象的基本概念

    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运算符进行克隆,会生成一个新的对象

  • 相关阅读:
    Windows10切换其他用户身份运行程序
    管理Windows功能
    如何暂时锁定您的键盘
    判断远程计算机基于x64或x86处理器
    复制文件而不在命令行中覆盖它们
    解决IDEA Gradle工程控制台输出乱码
    jquery 选择器、属性和CSS、文档处理、筛选、事件、动画效果
    IDEA炫酷主题推荐!(转)
    Windows 查看端口占用进程并关闭(转)
    JVM(二)--运行时数据区
  • 原文地址:https://www.cnblogs.com/wfc139/p/9135231.html
Copyright © 2020-2023  润新知