PHP的trait原型、迭代器使用

一、trait

1.1 trait(原型)

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

<?php
  // 定义原型
  trait A {
    
    
    public function getInfo() {
    
    
      echo 'getInfo function';
    }
  }

  // 使用原型
  class Student {
    
    
    use A; // 代码复用
  }

  // 测试
  $stu=new Student;
  $stu->getInfo();
?>

效果:

在这里插入图片描述


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

效果:
在这里插入图片描述

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

效果:
在这里插入图片描述

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

?>

效果:
在这里插入图片描述

二、迭代器

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); // 指针下移
  }
?>

效果:
在这里插入图片描述

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>";
  } 

?>

效果:
在这里插入图片描述

三、PSR编码规范

3.1 概述

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

http://psr.phphub.org/

在学习的php的路上,如果你觉得本文对你有所帮助的话,那就请关注点赞评论三连吧,谢谢,你的肯定是我写博的另一个支持。

猜你喜欢

转载自blog.csdn.net/weixin_44103733/article/details/112556538