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

定义:

  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();

 

    

 

posted @ 2018-07-22 11:01  ❉SSs  阅读(815)  评论(0编辑  收藏  举报