最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • PHP的trait原型、迭代器使用

    正文概述 转载于:掘金(陆小天)   2021-07-24   443

    一、trait

    1.1 trait(原型)

    trait为了减少单继承语言单限制,可以在不同层次结构内独立单类中复用类单方法集。 例:

    <?php
      // 定义原型
      trait A {
        public function getInfo() {
          echo 'getInfo function';
        }
      }
    
      // 使用原型
      class Student {
        use A; // 代码复用
      }
    
      // 测试
      $stu=new Student;
      $stu->getInfo();
    ?>
    

    效果:

    PHP的trait原型、迭代器使用


    1.2 引入多个trait

    例:

    <?php
      // 定义原型
      trait A {
        public function getInfo() {
          echo 'getInfo function<br>';
        }
      }
    
      // 定义原型
      trait B {
        public function getInfo2() {
          echo 'getInfo1 function<br>';
        }
      }
      // 使用原型
      class Student {
        use A,B; // 代码复用
      }
    
      // 测试
      $stu=new Student;
      $stu->getInfo();
      $stu->getInfo2();
    ?>
    

    效果: PHP的trait原型、迭代器使用

    1.3 trait和继承结合

    例:

    <?php
      // 定义原型
      trait A {
        public function getInfo() {
          echo '这是trait原型<br>';
        }
      }
    
      class Person {
        public function getInfo() {
          echo '这是person类<br>';
        }
      }
    
      // 继承类同时代码复用
      class Student extends Person {
        use A; // 继承了getInfo,又被A中getInfo覆盖
      }
    
      // 测试
      $stu=new Student;
      $stu->getInfo();
    ?>
    

    1.4 解决同名冲突

    例:

    <?php
      // 定义原型
      trait A {
        public function getInfo() {
          echo '这是trait原型A<br>';
        }
      }
      trait B {
        public function getInfo() {
          echo '这是trait原型B<br>';
        }
      }
      
      // 使用原型
      class Student {
        use A,B { // 引入a,b的trait,同时解决名称冲突
            // 方法一:方法替换
            A::getInfo insteadof B; // 将a中的getInfo替换掉b中掉getInfo
            // 方法二:改名
            B::getInfo as show;
            // 
        }
      }
      // 测试
      $stu=new Student;
      $stu->getInfo();
      $stu->show();
    ?>
    

    效果: PHP的trait原型、迭代器使用

    1.5 更改权限

    例:

    <?php
      trait A {
        private function show() {
          echo 'show<br>';
        }
      }
    
      class Student {
        use A {
          show as public; // 将show方法权限设为public
          show as public show2; // 将show方法权限设为public并改名show2
        }
      }
      $stu=new Student;
      $stu->show();
      $stu->show2();
    
    ?>
    

    效果: PHP的trait原型、迭代器使用

    二、迭代器

    2.1 遍历数组

    手动遍历数组 步骤: 1、复位数组指针 reset() 2、检查指针是否合法
    3、获取当前值 current() 4、获取当前键 key() 5、指针下移 next() 代码实现:

    <?php
      $stu=['tom', 'jack', 'jackson', 'jane'];
      reset($stu); // 复位指针
      while(key($stu) !== null) { //  键合法 
        echo key($stu), '-', current($stu), '<br>';
        next($stu); // 指针下移
      }
    ?>
    

    效果: PHP的trait原型、迭代器使用

    2.2 迭代器

    迭代器是php内置的接口 场景:遍历对象,获取的是对象中属性保存的组数

    <?php
      // 定义类实现迭代器接口
      class MyClass implements Iterator {
        private $list=array();
        public function addStu($name) {
          $this->list[]=$name;
        }
        // 实现接口中的复位方法
        public function rewind () {
          reset($this->list);
        }
        // 验证当前指针是否合法
        public function valid() {
          return key($this->list) !== null;
        }
        // 获取值
        public function current() {
          return current($this->list);
        }
        // 获取键
        public function key() {
          return key($this->list);
        }
        // 指针下移
        public function next() {
          next($this->list);
        }
      }
    
      // 创建班级
      $class=new MyClass();
      // 添加学生
      $class->addStu('tom');
      $class->addStu('berry');
      $class->addStu('ketty');
      // 遍历班级
      foreach($class as $k=>$v) {
        echo "{$k}-{$v}<br>";
      } 
    
    ?>
    

    效果: PHP的trait原型、迭代器使用

    三、PSR编码规范

    3.1 概述

    1、PSR是PHP Standard Recomations的简写,由PHP FIG组织制定的PHP规范,是PHP开发的实践标准。 2、目前已表决通过了6套标准,已经得到大部分PHP框架的支持和认可 3、网址:


    起源地下载网 » PHP的trait原型、迭代器使用

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元