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的路上,如果你觉得本文对你有所帮助的话,那就请关注点赞评论三连吧,谢谢,你的肯定是我写博的另一个支持。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你华还是你华

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值