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

    ========概念=========

    一、类与对象关系:

      1、类实例化对象

      2、类诞生对象

      3、类生产出对象

    二、类的组成部分:

      1、属性(变量)

      2、方法(函数)

    三、定义一个类:

      1、使用关键字class

      2、命名采用驼峰法

      3、造对象并调用属性和方法

    class Person{
        public $name;
        public $age;
    
        public function __construct($n,$a){
            $this->name=$n;
            $this->age=$a;
        }
    
        public function say(){
            echo "my name is {$this->name},my age is {$this->age}";
        }
    }

    四、$this作用:永远代表本对象

    五、构造方法:public function __construct(){}

           对象在诞生之前会触发

    六、析构方法:public function __destruct(){}
           对象在消失之前会触发

    注:类的方法中使用属性时,必须加上$this

    ========面向对象的三大特性===============

    一、封装

    1、封装的概念:隐藏属性、方法或实现细节的过程称为封装

    2、类的封装修饰词:

        (1)、public:公开的(类外面可以访问,子类可以访问,父类可以访问)

        (2)、protected:被保护的(类外面不能访问,子类可以访问,父类可以访问)

        (3)、private:私有的(类外面不能访问,子类不能访问,父类可以访问)

    3、类的封装作用:

        (1)、部分方法要对外开放.
        (2)、部分方法要对外封锁.

    二、继承

    继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展

    关键字:extends

    对父类构造方法的继承

    子类完成继承后,自动继承父类的属性和方法

    三、多态

    多态就是指一个类实例的相同方法在不同情形有不同表现形式。

    <?php
    //接口
    interface Usb{
       public function load();
       public function start();
       public function unload();
    }
    class Upan implements Usb{//优盘
        public function load(){
            echo "Upan is load";
        }
        public function start(){
            echo "Upan is unloading";
        }
        public function unload(){
            echo "Upan is unloading";
        }
    }
    
    class Udisk implements Usb{//充电宝
        public function load(){
            echo "Udisk is load";
        }
        public function start(){
            echo "Udisk is unloading";
        }
        public function unload(){
            echo "Udisk is unloading";
        }
    }
    //盗版厂商的usb
    class FalUsb{
        public function load(){
            echo "FalUsb is load";
        }
        public function start(){
            echo "FalUsb is unloading";
        }
        public function unload(){
            echo "FalUsb is unloading";
        }
    }
    
    
    //-------------------------------------
    $obj1 = new Upan();
    $obj2 = new Udisk();
    
    $obj3 = new FalUsb();//盗版
    
    /*
     * function useUsb($o){
            $o->load();
            $o->start();
            $o->unload();
            echo "<hr>";
        }
     */
    
    function useUsb(Usb $o){//方法括号中规定$o必须是Usb的子类
        $o->load();
        $o->start();
        $o->unload();
        echo "<hr>";
    }
    useUsb($obj1);
    useUsb($obj2);
    
    useUsb($obj3);//这个会报错:Catchable fatal error: Argument 1 passed to useUsb() must implement interface Usb
    ?>

    ===============抽象类========

    一、关键字abstract

    二、含有抽象方法的类是抽象类

    三、抽象方法:未被实现的方法(abstract public function unload();)

    四、子类中必须实现父类的抽象方法,否则报错

    abstract class Usb{
       public function load(){
          echo "usb is loading";
       }
       public function start(){
          echo "usb is starting";
       }
       abstract public function unload();//抽象方法
    }
    
    class Upan extends Usb{
        public function unload(){//子类中必须实现父类的抽象方法,否则报错
            echo "usb is unloading";
        }
    }

    ===========接口==========

    一、关键字interface

    二、只含有抽象方法、不能含有普通方法

    三、子类中必须实现接口的所有的抽象方法,否则报错

    四、子类不能用extends继承,用implements实现接口

    五、接口中的方法都是抽象方法,不能加abstract

    //接口
    interface Usb1{
       public function load();
       public function start();
       public function unload();
    }
    
    class Upan1 implements Usb1{//子类中必须实现父类的所有抽象方法,否则报错
        public function load(){
            echo "usb is load";
        }
        public function start(){
            echo "usb is unloading";
        }
        public function unload(){
            echo "usb is unloading";
        }
    }

    六、一个子类可以实现多个接口

    //接口
    interface Usb1{
       public function load();
       public function start();
       public function unload();
    }
    interface PressKey{
       public function run();
       public function say();
    }
    class Upan1 implements Usb1,PressKey{//一个子类可实现多个接口
        public function load(){
            echo "usb is load";
        }
        public function start(){
            echo "usb is unloading";
        }
        public function unload(){
            echo "usb is unloading";
        }
        public function run(){
            echo "usb is run";
        }
        public function say(){
            echo "usb is say";
        }

    七、接口扩展,即一个子接口继承父类接口所有的抽象方法

    //接口
    interface Usb1{
       public function load();
       public function start();
       public function unload();
    }
    interface Usb2 extends Usb1{//接口也可以继承其他的接口
       public function run();
    }
    class Upan1 implements Usb2{
        public function load(){
            echo "usb is load";
        }
        public function start(){
            echo "usb is unloading";
        }
        public function unload(){
            echo "usb is unloading";
        }
        public function run(){
            echo "usb is run";
        }
    }
  • 相关阅读:
    PS 色调——颜色运算
    [ExtJS5学习笔记]第二十二节 Extjs5中使用beforeLabelTpl配置给标签增加必填选项星号标志
    [ExtJS5学习笔记]第二十一节 Extjs5中使用config配置给ext.widget或者create方法传递参数
    PS 滤镜——素描算法(一)
    [ExtJS5学习笔记]第二十节 Extjs5配合数组的push方法,动态创建并加载组件
    [ExtJS5学习笔记]第十九节 Extjs5中通过设置form.Panel的FieldSet集合属性控制多个field集合
    【翻译】Ext JS最新技巧——2014-9-10
    Ext JS 5的声明式事件监听
    BZOJ_3477_[Usaco2014 Mar]Sabotage_二分答案
    BZOJ_3012_[Usaco2012 Dec]First!_trie树+拓扑排序
  • 原文地址:https://www.cnblogs.com/zhengleilei/p/9350473.html
Copyright © 2011-2022 走看看