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

     1,简单的对象创建

    //类的作用域final:将阻止子类重写这个字段
    //方法的作用域abstract: 在父类中声明,在子类中实现
    //定义类:

    class Employee{
     
    //定义字段
     private $name;
     
    protected $title;
     
    public $wage;
     
     
    //常量
     const PI = 3.1415926;

     
    //静态成员变量
     private static $visitors = 0;
     
     
    //定义构造函数
     function __construct(){
      
    //使用静态成员变量
      self::$visitors++;
      
    echo "constructor";
     }
     
    //定义析构函数
     function __destruct(){
      
    echo "destruct";
     }

     
    //声明方法
     public function clockIn(){
      
    //使用字段
      echo "Member $this->name";
     }

     
    //在访问一个对象并不拥有的属性时(比如私有字段),如果该对象用户__get和__set方法,则会自动调用__get方法或__set方法
     function __set($property,$value){ 
      
    $this->$property = $value;
     }
     
    function __get($property){  
      
    return $this->$property;
     }
    }

    //类的继承 Manager继承Employee
    class Manager extends Employee {
     
    function __construct(){
      
    //调用父类的构造函数或方法
      parent::__construct();
      parent
    ::clockIn();
      
    echo "Manager constructor";
     }
    }

    //创建对象
    $employee = new Employee();
    $employee->wage = 10000;
    //使用常量
    echo Employee::PI;
    //调用方法
    $employee->clockIn();

    $manager = new Employee();
    //instanceof判断一个对象是类的实例、类的子类,还是实现了某个特定接口
    if($manager instanceof Employee ) echo "Yes";

    2,高级OO特性

    (1)对象克隆 

    //对象克隆
    class ClassA{
        
    private $name;
        
    private $title;

        
    public function setName($name){
            
    $this->name = $name;
        }

        
    function getName(){
            
    return $this->name;
        }

        
    public function setTitle($title){
            
    $this->title = $title;
        }
        
        
    public  function getTitle(){
            
    return $this->title;
        }
        
        
    function __clone(){
            
    echo "我被克隆了","<br>";
        }
    }

    $classA = new ClassA();
    $classA->setName("NameA");
    $classA->setTitle("TitleA");

    $classB = clone $classA;
    $classB->setName("NameB");

    echo $classA->getName(),"<br>",$classA->getTitle(),"<br>";
    echo $classB->getName(),"<br>",$classB->getTitle(),"<br>";
    /* output
    我被克隆了
    NameA
    TitleA
    NameB
    TitleA
    */

    (2)接口

    //接口
    interface IPillage{
        
    function method();
    }

    class ClassC extends ClassA implements IPillage {
        
    function method(){
            
    echo "inteface method";
        }
    }

    $classC = new ClassC();
    $classC->method();
    //inteface method

    (3)抽象类

    //抽象类,是不能实例化的类,只能作为其它类继承的基类
    abstract class BaseClass{
        
    protected $name;
        
    abstract function method();
    }

    class ChileClass extends BaseClass {
        
    function method(){
            
    echo "method";
        }
    }

    $child = new ChileClass();
    $child->method();
    //output method

    注:

    如果要创建一个模型,这个模型将由一些紧密相关的对象采用,就可以使用抽象类。如果要创建由一些不相关对象采用的功能,就使用接口。
    如果必须从多个来源继承行为,就使用接口。php可以继承多个接口,但不能扩展多个抽象类。
    如果知道所有类都会共享一个公共的行为实现,就使用抽象类,并在其中实现该行为。在接口中无法实现行为。

  • 相关阅读:
    css 九宫格
    Scratch 3.0 版本比较
    快速上手IOT视觉化开发工具Node-RED
    使用MUART0-P-1-2设置无线PM2.5感测环境
    12只超酷机器人,在家用3D打印搞定!
    玩机器人可以学到什么?
    人工智能AI芯片与Maker创意接轨(下)
    人工智能AI芯片与Maker创意接轨 (中)
    人工智能AI芯片与Maker创意接轨 (上)
    用Micro:bit控制遥控车
  • 原文地址:https://www.cnblogs.com/icebutterfly/p/1600080.html
Copyright © 2011-2022 走看看