• 技术文章 >后端开发 >php教程

    PHP 面向对象实现代码_PHP

    2016-06-01 12:22:12原创419
    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 "我被克隆了","
    ";
    }
    }
    $classA = new ClassA();
    $classA->setName("NameA");
    $classA->setTitle("TitleA");
    $classB = clone $classA;
    $classB->setName("NameB");
    echo $classA->getName(),"
    ",$classA->getTitle(),"
    ";
    echo $classB->getName(),"
    ",$classB->getTitle(),"
    ";
    /* 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可以继承多个接口,但不能扩展多个抽象类。
    如果知道所有类都会共享一个公共的行为实现,就使用抽象类,并在其中实现该行为。在接口中无法实现行为。
    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:PHP 面向对象
    上一篇:php 显示指定路径下的图片_PHP 下一篇:PHP小程序自动提交到自助友情连接_PHP
    Web大前端开发直播班

    相关文章推荐

    • 急关于php返回xml信息的有关问题 • 哪位高手告诉小弟我PHP 5系列与PHP 4系列有什么不同 • Composer PHP依赖管理的新时代• [求助]zend studio怎么调试• 求一段php取值代码

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网