• insteadof


    在php手册中间搜索insteadof是没有结果的。

    insteadof主要是用来解决在同一个类中同时使用多个trait,然而在使用的这些trait中方法名称冲突的问题。

    借用别人的例子:

    <?php

    class Base
    {
      public function hello()
      {
        echo 'method hello from class Base' . '<br>';
      }
    }

    trait Hello
    {
      public function hello()
      {
        echo 'method hello from Trait Hello' . '<br>';
      }
      public function hi()
      {
        echo 'method hi from Trait Hello' . '<br>';
      }
      abstract public function getValue();
      static public function staticMethod()
      {
        echo 'static method staticMechod from Trait Hello' . '<br>';
      }
      public function staticValue()
      {
        static $value;
        $value++;
        echo $value . '<br>';
      }
    }

    trait Hi
    {
      public function hello()
      {
        parent::hello();
        echo 'method hello from Trait Hi' . '<br>';
      }
      public function hi()
      {
        echo 'method hi from Trait Hi' . '<br>';
      }
    }

    trait HelloHi
    {
      use Hello, Hi{
        Hello::hello insteadof Hi;
        Hi::hi insteadof Hello;
      }
    }

    class MyNew extends Base
    {
      use HelloHi;
      private $value = 'class MyNew' . '<br>';
      public function hi()
      {
        echo 'method hi from class MyNew' . '<br>';
      }
      public function getValue()
      {
        retturn $this->value;
      }
    }

    $obj = new MyNew();
    $obj->hello();
    //输出:'method hello from Trait Hello'
    //优先级顺序:trait类中的方法覆盖了base中的方法,然后通过insteadof 指定了Hello中的hello方法覆盖了Hi中的hello方法

  • 相关阅读:
    bootstrap-table 数据表格行内修改
    java文件上传(单文件 多文件)与删除
    bootstrap-table之通用方法( 时间控件,导出,动态下拉框, 表单验证 ,选中与获取信息)
    bootstrap-table 大量字段整体表单上传之时间处理
    Java实习问题记录
    Playbook剧本初识
    自动化运维工具-Ansible基础
    性能优化概述
    Rewrite基本概述
    Nginx常见问题
  • 原文地址:https://www.cnblogs.com/buerr/p/6694296.html
Copyright © 2020-2023  润新知