• 面向对象基本概念,关键字,类的组成,静态,三大特性,创建类和对象,设计模式


    定义:

      OOP   Object Oriented Programming  面向对象编程

      面向对象:把任务分给各个类,每个类完成一个任务,来共同完成整个任务功能

      面向过程:把任务分层几个步骤,一步一步完成整个任务。

      先有类再有对象

      类与对象的关系 :类实例化对象,或类诞生对象,或类生产出对象.

    <?php
        header("Content-type:text/html;charset=utf-8");
        echo "<pre>";
        //定义一个类  Person
        class Person{
            public $name;//属性名 
            public $age;//属性名 
            public function say(){//方法
                echo 'aaa';
            }
        }
        //创建对象
        $p1 = new Person();
        //使用变量
        $p1->name = '小明';
        //输出
        var_dump($p1);
        //调用方法
        $p1->say();
    ?>

    打印效果

    关键字:

      (1)封装修饰词

         public 类外面可以访问,子类可以访问,父类可以访问

         protected 类外面不能访问,子类可以访问,父类可以访问.

         private  类外面不能访问,子类不能访问,父类可以访问

      (2)特殊关键字    (属于类,只能类调用,不能对象调用)

         static    静态  (属性,方法,在加载类的时候就分配空间,所以不需要实例化就可以直接访问)

         extends     继承 (类继承,见下方)

         const    常量  (定义常量用大写,不写$)

         final      最终

    类的组成:

      属性(变量)

      方法(函数)

      常量

    (1)属性:

      一般属性:

        定义:类中的变量

        定义形式:   (可以定义不赋值,赋值只能为常量,不能为变量,也不能为算式)

          (1)public $a;

          (2)public $a = 1;

        使用形式:  $对象->属性名

      静态属性: 静态属性属于类,外部可调用

        关键字:static

        定义方法:static $a;   

        使用方法:类名::$静态属性名

    (2)方法:

      一般方法:

        定义:public function 函数名(){}

        使用:内部$this->函数名()

           外部$对象->函数名()

          $this代表当前所属类的当前对象

         get_class($p1)  可以获得当前对象的类名  

      静态方法: 静态方法属于类,外部可调用

        定义:static function 方法名(){}

        使用:类名::$静态方法名     静态方法中不能用$this ,静态方法中不能调用非静态方法

      self:

        当前类

        只能在方法内部,代表当前类名称

      特殊方法:

      构造方法:

         public function __construct(){
              #对象在诞生之前会触发
        }

        注意

          该方法必须是普通方法(不能是静态方法)

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

      析构方法:

        public function __destruct(){
              #对象在消失之前会触发
        }

        注意

          该方法不能调用,不能有形参,可以用于清理一些在php代码结束后不能清理的数据,如生成的文件。

    基本语法:

      1.定义类      关键字class

        (1)定义属性

        (2)定义方法

        (3)定义常量

      2.创建对象

        1)$对象 = new   类();        为创建一个新的对象

        2)$对象 = new self;  只能在类内部方法中使用

        3)$对象 = new 对象;  通过对象创建一个该对象所属类的新对象

      3.使用对象

        为变量赋值,和调用方法

    面向对象三大特性

      封装,继承,多态

      1.封装:属性私有化,提供公有化的方法来对属性做出改变,目的:使类更加安全。

      2.继承:子类继承父类所有的东西,包括属性及方法,目的:类的扩展性增强,减少代码冗余

      3.多态:不同对象调用相同方法,得到不同的结果

      继承:

        关键字:extends

        概念:一个类从另一个已有的类获得其特性

        派生概念:从一个已有的类产生一个新的类

        单继承:一个类可以有多个子类,但是只能有一个父类。

        parent:类中调用父类的方法 

          parent::父类方法名()

        构造方法的继承:

          调用子类时,若子类有构造方法,则执行子类构造方法,若子类没有,则执行父类构造方法,析构方法同理。

        重写:

          子类的属性或方法,和父类同名,则为重写,重新在子类中定义这个属性或方法,但方法中的参数个数必须一致,构造函数例外可以不一致。

        禁止继承:

          类: final class Person{}

          方法:final function 方法名(){}   禁止下级对其重写

    设计模式:

      1.工厂模式  指定类名便可获得该类对象

      2.单例模式  只允许创造一个对象

        方法:私有化属性,私有化构造函数,私有化克隆方法,公有化创建对象方法

        

    //单例
    class Person{
            private static $obj;
            private function __construct(){//私有化的构造函数的作用是,阻止类的外部实例化
                
            }
            private function __clone(){//私有化的__clone()阻止外部克隆
                
            }
            public static function getObj(){//由于静态方法只能访问静态变量,所以要把上面的$obj设为静态
                if(self::$obj instanceof self){//判断变量是否已经被实例化,如果已经被实例化,则直接返回
                    self::$obj = new self;
                }else{
                    return self::$obj;
                }
                
            }
        }
    //工厂  
      abstract class Product{
            abstract public function getName();
        }
        class ProductA extends Product{
            public function getName(){
                echo "这是A商品<br>";
            }
        }
        class ProductB extends Product{
            public function getName(){
                echo "这是B商品<br>";
            }
        }
        
        class ProductFactory{
            public static function create($num){
                switch($num){
                    case 1:
                        return new ProductA;
                    break;
                    case 2:
                        return new ProductA;
                    break;
                }
                return null;
            }
        }
        $objA = ProductFactory::create(1);
        $objA->getName();
        $objB = ProductFactory::create(2);
        $objB->getName();

        

  • 相关阅读:
    Java-注解(@Annotation)
    面试(三)---volatile
    面试(二)---synchronized
    Linux使用技巧(一):vim中选中多行、复制和粘贴
    Git——学习Git
    【Linux】Linux下cp ~中关于“~”的疑问
    【Linux】Linux中cd test和cd /test以及类似命令的区别
    【Linux】Linux系统中/opt 和 /usr目录
    【Linux】Linux的文件权限
    读《大数据时代下半场-数据治理、驱动与变现》--1
  • 原文地址:https://www.cnblogs.com/SSs1995/p/9317715.html
Copyright © 2020-2023  润新知