博客列表 >PDO常用操作、trait 、interface、抽象类与interface的区别与联系

PDO常用操作、trait 、interface、抽象类与interface的区别与联系

乐作人生
乐作人生原创
2020年09月17日 11:22:15719浏览
  1. 熟悉PDO所有常用方法,并实例演示
  • 数据库配置
    1. // 连接参数
    2. return [
    3. // 类型
    4. 'type' => $type ?? 'mysql',
    5. // 默认主机名
    6. 'host' => $username ?? 'localhost',
    7. // 默认编码集
    8. 'charset' => $charset ?? 'utf8',
    9. // 默认端口号
    10. 'port' => $porst ?? '3306',
    11. // 默认用户名
    12. 'username' => $usernam ?? 'root',
    13. // 默认用户的密码
    14. 'password' => $password ?? 'root',
    15. // 默认数据库
    16. 'dbname' => $dbname ?? 'phpedu',
    17. ];
  • 连接数据库
    1. // 1. 导入配置参数
    2. //__DIR__获取当前目录的路径
    3. $config = require __DIR__ . '\\0829-1config.php';
    4. // print_r($config);
    5. extract($config);
    6. // new PDO(数据源, 用户名, 密码);
    7. // $dsn = '数据库类型:host=主机名;dbname=默认数据库;charset=默认编码集;port=默认端口';
    8. // $dsn = 'mysql:host=localhost;dbname=phpedu;charset=utf8;port=3306';
    9. try {
    10. //要执行的代码,$dsn代表数据源
    11. $dsn = sprintf('%s:host=%s;dbname=%s',$type,$host,$dbname);
    12. $pdo =new PDO($dsn, $username, $password);
    13. // var_dump($pdo);
    14. } catch (PDOException $e) {
    15. die($e->getMessage());
    16. }
  • 新增数据

    1. // 1、连接数据库
    2. $config = require __DIR__ . '\\0829-2.php';
    3. //2、操作
    4. // ?占位符;:name命名占位符
    5. $sql = 'INSERT `user` SET `name`=?, `email`=?, `password`=?;';//将?分别替换成:name,:email,:password;占位符前面的:可以不加
    6. // sql语句对象(预处理对象)
    7. $stmt = $pdo->prepare($sql);
    8. // var_dump($stmt);
    9. // 将占位符与变量名绑定
    10. //1)bindParam()参数绑定
    11. // bindParam(): 参数与指定的变量名进行绑定,也叫引用传参
    12. //常量:PDO::PARAM_STR表示 SQL 中的 CHAR、VARCHAR 或其他字符串类型
    13. $stmt->bindParam(1, $name, PDO::PARAM_STR, 30);//$stmt->bindParam(':name', $name, PDO::PARAM_STR, 30);
    14. $stmt->bindParam(2, $email,PDO::PARAM_STR, 100);//$stmt->bindParam(':email', $email, PDO::PARAM_STR, 100);
    15. $stmt->bindParam(3, $password, PDO::PARAM_STR, 40);//$stmt->bindParam(':password', $password, PDO::PARAM_STR, 40);
    16. //变量名与值进行绑定
    17. $name = '张龙';
    18. $email = 'zhanglong@qq.com';
    19. $password = sha1('156793');
    20. //执行
    21. $stmt->execute();
    22. //简易方法:可以省略参数绑定的步骤,直接在execute()传参时进行绑定,但此时参数必须放在一个数组中
    23. // 如:?匿名占位符可写成$stmt->execute(['张龙2','zhanglong2@qq.com',sha1('1562793')]);
    24. // 如:使用命名占位符, 则需传一个关联数组,键名就是占位符,可写成$res=$stmt->execute(['name'=>'张龙2', 'email'=>'zhanglong2@qq.com','password'=> sha1('1562793')]);
    25. //2)bindValue()值绑定
    26. // $name='张士';
    27. // $email='zhangshi@qq.com';
    28. // $password=sha1('589802');
    29. // $stmt->bindValue(1,$name,PDO::PARAM_STR);
    30. // $stmt->bindValue(2,$email,PDO::PARAM_STR);
    31. // $stmt->bindValue(3,$password,PDO::PARAM_STR);
    32. // $stmt->execute();
    33. //rowCount():返回操作成功后受影响的记录数量,这里是指新增的记录数量
    34. echo '成功新增'.$stmt->rowCount().'条记录';
    35. // 3、关闭
    36. // $pdo = null;
    37. unset($pdo);


    1. // 1、连接数据库
    2. $config = require __DIR__ . '\\0829-2.php';
    3. //2、操作
    4. // ?占位符;:name命名占位符
    5. $sql = 'INSERT `user` SET `name`=:name, `email`=:email, `password`=:password;';
    6. // sql语句对象(预处理对象)
    7. $stmt = $pdo->prepare($sql);
    8. $res=$stmt->execute(['name'=>'张龙2', 'email'=>'zhanglong2@qq.com','password'=> sha1('1562793')]);
    9. echo '成功新增'.$stmt->rowCount().'条记录';
    10. // 3、关闭
    11. // $pdo = null;
    12. unset($pdo);

  • 更新数据
    1. // 1、连接数据库
    2. $config = require __DIR__ . '\\0829-2.php';
    3. //2、操作
    4. // 更新数据时一定要有条件
    5. $sql = 'UPDATE `user` SET `name`=?, `email`=?, `password`=? WHERE `id` = ?;';
    6. // sql语句对象(预处理对象)
    7. $stmt = $pdo->prepare($sql);
    8. $res=$stmt->execute(['赵虎', 'zhaohu@qq.com',sha1('580293'),9]);
    9. //rowCount():返回操作成功后受影响的记录数量,这里是指新增的记录数量
    10. echo $stmt->rowCount() === 1 ? '成功更新了 ' . $stmt->rowCount() . ' 条记录' : '没有记录被更新';
    11. // 3、关闭
    12. unset($pdo);
  • 删除数据
    1. // 1、连接数据库
    2. $config = require __DIR__ . '\\0829-2.php';
    3. //2、操作
    4. // 更新数据时一定要有条件
    5. $sql = 'DELETE FROM `user` WHERE `id` = ?;';
    6. // sql语句对象(预处理对象)
    7. $stmt = $pdo->prepare($sql);
    8. $res=$stmt->execute([8]);
    9. //rowCount():返回操作成功后受影响的记录数量,这里是指新增的记录数量
    10. echo $stmt->rowCount() === 1 ? '成功删除了 ' . $stmt->rowCount() . ' 条记录' : '没有记录被删除';
    11. // 3、关闭
    12. unset($pdo);
  • 查询数据
    • fetch()+while()
      1. // pdo查询数据:fetch()+while()逐条遍历
      2. // 1、连接数据库
      3. $config = require __DIR__ . '\\0829-2.php';
      4. //2、操作
      5. // 更新数据时一定要有条件
      6. $sql = 'SELECT `id`,`name`,`email` FROM `user` WHERE `id` > ?;';
      7. // sql语句对象(预处理对象)
      8. $stmt = $pdo->prepare($sql);
      9. //给查询结果增加一个条件:符合时逐条遍历显示结果,否则打印错误信息
      10. if($stmt->execute([5])){
      11. // 逐条遍历,fetch()返回一维数组,将数据表的记录指针自动下移
      12. // $a = $stmt->fetch();
      13. // printf('<pre>%s</pre>',print_r($a,true));
      14. //数据查询完之后再进行遍历,则不会显示数据,可用while循环遍历操作
      15. while($a=$stmt->fetch()){
      16. printf('<pre>%s</pre>',print_r($a,true));
      17. }
      18. }else{
      19. // 返回一个错误信息的数组
      20. printf('<pre>%s</pre>',print_r($stmt->errorInfo(),true));
      21. // 调试方法:打印出执行的SQL预处理语句,进行检查
      22. $stmt->debugDumpParams();
      23. }
      24. // 3、关闭
      25. unset($pdo);
    • fetchALl() + foreach()
      1. // pdo查询数据:fetchALl() + foreach()
      2. // 1、连接数据库
      3. $config = require __DIR__ . '\\0829-2.php';
      4. //2、操作
      5. // 更新数据时一定要有条件
      6. $sql = 'SELECT `id`,`name`,`email` FROM `user` WHERE `id` < ?;';
      7. // sql语句对象(预处理对象)
      8. $stmt = $pdo->prepare($sql);
      9. //给查询结果增加一个条件:符合时显示结果,否则打印错误信息
      10. if($stmt->execute([5])){
      11. // 一次性获取所有满足条件的数据信息
      12. $a = $stmt->fetchAll();
      13. //数据查询完以二维数组显示,可用foreach操作
      14. foreach($a as $value){
      15. vprintf('<li>id = %d, name = %s, email = %s</li>', $value);
      16. }
      17. }else{
      18. // 返回一个错误信息的数组
      19. printf('<pre>%s</pre>',print_r($stmt->errorInfo(),true));
      20. // 调试方法:打印出执行的SQL预处理语句,进行检查
      21. $stmt->debugDumpParams();
      22. }
      23. // 3、关闭
      24. unset($pdo);
    • 将每个字段绑定到变量上
      1. // pdo查询数据:将每个字段绑定到变量上
      2. // 1、连接数据库
      3. $config = require __DIR__ . '\\0829-2.php';
      4. //2、操作
      5. // 查询数据时一定要有条件
      6. $sql = 'SELECT `id`,`name`,`email` FROM `user` WHERE `id` < ?;';
      7. // sql语句对象(预处理对象)
      8. $stmt = $pdo->prepare($sql);
      9. $stmt->execute([5]);
      10. // 将三个字段与三个变量进行绑定,通过列名进行绑定
      11. $stmt->bindColumn('id', $id);
      12. $stmt->bindColumn('name', $name);
      13. $stmt->bindColumn('email', $email);
      14. while ($user = $stmt->fetch()) {
      15. printf('<pre>%s</pre>',print_r($user,true));
      16. }
      17. // 3、关闭
      18. unset($pdo);
    • 查询符合条件的记录数量
      1. //查询符合条件的记录数量
      2. // 1、连接数据库
      3. $config = require __DIR__ . '\\0829-2.php';
      4. //2、操作
      5. //获取满足条件的记录数量不能用$stmt->rowCount(),要用COUNT(*)
      6. // COUNT(*):字段名,并不直观,所以给个别名
      7. $sql = 'SELECT COUNT(*) AS `count` FROM `user` WHERE `id` < ?;';
      8. // 预处理语句
      9. $stmt = $pdo->prepare($sql);
      10. $stmt->execute([5]);
      11. //将别名count绑定到变量
      12. $stmt->bindColumn('count', $count);
      13. $stmt->fetch(PDO::FETCH_BOUND);
      14. echo '满足条件记录数量是: ', $count, ' 条记录';
      15. // 3. 关闭
      16. $pdo = null;
  1. trait 常用场景
  • 代码复用
    1. //1、实现代码复用,图片单继承限制
    2. trait Demo{
    3. public function getUser(){
    4. return '姓名:'.$this->name.',年龄:'.$this->age.'岁';
    5. }
    6. }
    7. trait Demos{
    8. public function getUsers(){
    9. //get_class_vars() 函数返回由类的默认属性组成的数组;参数为类名
    10. //self可以访问本类中的静态属性和静态方法,可以访问父类中的静态属性和静态方法。用self时可以不用实例化
    11. //__CLASS__:当前类的名称;等价于self::class
    12. return sprintf('<pre>%s</pre>', print_r(get_class_vars(self::class), true));
    13. }
    14. }
    15. class Demo1{
    16. //插入多个trait,用,隔开
    17. use Demo,Demos;//相当于把Demo和Demos的方法都复制到了本类中
    18. protected $name='张三';
    19. protected $age='30';
    20. }
    21. class Demo2{
    22. use Demo;
    23. protected $name='李四';
    24. protected $age='40';
    25. }
    26. echo (new Demo1)->getUser().'<br>';
    27. echo (new Demo1)->getUsers().'<br>';
    28. echo (new Demo2)->getUser().'<hr>';
  • trait支持继承
    1. //2、trait支持继承
    2. trait Demo{
    3. public $name='李四';
    4. public function getUser()
    5. {
    6. //__METHOD__:返回该方法被定义时的名字(区分大小写)
    7. return 'trait method name : ' . __METHOD__;
    8. }
    9. }
    10. class Demo1{
    11. use Demo;
    12. }
    13. class Demo2 extends Demo1{
    14. }
    15. echo (new Demo2)->getUser().'<br>';
    16. echo (new Demo2)->name.'<hr>';
    17. //静态属性及方法
    18. trait Demos{
    19. public static $name='张三';
    20. public static function get()
    21. {
    22. //__METHOD__:返回该方法被定义时的名字(区分大小写)
    23. return 'trait method name : ' . __METHOD__;
    24. }
    25. }
    26. //可以使用抽象类(abstract)使用strait
    27. abstract class Demo3{
    28. use Demos;
    29. }
    30. // 给用户提供的工作类/实现,应该尽可能的简单,可以将一些实现细节进行隐藏
    31. class Demo4 extends Demo3{
    32. }
    33. //静态属性的调用方法为"类名::属性名"
    34. echo Demo4::get().'<br>';
    35. echo Demo4::$name;
  • trait扩展
    1. //3、trait扩展
    2. trait Demo{
    3. public function getUser(){
    4. return '姓名:'.$this->name.',年龄:'.$this->age.'岁';
    5. }
    6. }
    7. trait Demos{
    8. public function getUsers(){
    9. //get_class_vars() 函数返回由类的默认属性组成的数组;参数为类名
    10. return sprintf('<pre>%s</pre>', print_r(get_class_vars(self::class), true));
    11. }
    12. }
    13. //同时引入多个trait,用,隔开;trait支持功能整合,trait中允许再引入trait
    14. trait tDemo{
    15. use Demo,Demos;
    16. }
    17. class Demo1{
    18. use tDemo;//tDemo中已经整合了Demo和Demos,此时只需要引入一个tDemo即可
    19. protected $name='张三';
    20. protected $age='30';
    21. }
    22. echo (new Demo1)->getUser().'<br>';
    23. echo (new Demo1)->getUsers();
  • trait成员的命名冲突
    1. //4、trait成员的命名冲突
    2. trait Demo{
    3. public function getUser(){
    4. return '姓名:'.$this->name.',年龄:'.$this->age.'岁';
    5. }
    6. }
    7. trait Demos{
    8. public function getUser(){
    9. //get_class_vars() 函数返回由类的默认属性组成的数组;参数为类名
    10. return sprintf('<pre>%s</pre>', print_r(get_class_vars(self::class), true));
    11. }
    12. }
    13. trait tDemo1{
    14. protected $profession='司机';
    15. public function getUser(){
    16. // return __METHOD__;
    17. return '姓名:'.$this->name.',年龄:'.$this->age.'岁,职业:'.$this->profession;
    18. }
    19. }
    20. //同时引入多个trait,用,隔开;trait支持功能整合,trait中允许再引入trait
    21. trait tDemo{
    22. use Demo,Demos,tDemo1{//Demo和Demos中的方法名冲突,先替代,然后起别名
    23. //替代:用Demo::getUser将Demos::getUser替换掉,也就是只有Demo中的方法起作用
    24. Demo::getUser insteadOf Demos;
    25. Demos::getUser insteadOf tDemo1;//用Demos::getUser将tDemo1::getUser替换掉
    26. //别名:给Demos::getUser起别名
    27. Demos::getUser as getUsers;
    28. tDemo1::getUser as td;//给tDemo1::getUser起别名
    29. }
    30. }
    31. class Demo1{
    32. use tDemo;//tDemo中已经整合了Demo和Demos,此时只需要引入一个tDemo即可
    33. protected $name='张三';
    34. protected $age='30';
    35. }
    36. echo (new Demo1)->getUser().'<br>';
    37. echo (new Demo1)->getUsers().'<br>';
    38. echo (new Demo1)->td();
    39. //2个以上的trait成员命名冲突时如何做???
  • trait与interface组合
    1. //5、trait与interface组合
    2. //创建接口,在创建前先判断当前接口是否存在
    3. //interface_exists() 函数检查接口是否已被定义
    4. if (!interface_exists('iDemo')){
    5. interface iDemo {
    6. // 创建一个静态抽象方法
    7. //接口的方法必须是public(默认是public),且接口中只能定义方法名(含参数),不能有函数体
    8. public static function index();
    9. public static function user();
    10. }
    11. }
    12. //用trait实现接口中的方法
    13. trait tDemo{
    14. // 将抽象类的实现代码写到trait中
    15. public static function index(){
    16. return __METHOD__;
    17. }
    18. public static function user(){
    19. return 'Hello Word!';
    20. }
    21. }
    22. //要实现一个接口,需使用 implements 操作符,类中必须实现接口中定义的所有方法
    23. abstract class work implements iDemo{
    24. use tDemo;
    25. }
    26. class works extends work{}
    27. echo works::index().'<br>';
    28. echo works::user();
  1. interface常用场景

    1. //interface:接口;接口完全的分离了:设计(接口)与实现(实现类)
    2. //1、单接口的实现
    3. interface A{
    4. //接口中只能定义方法名(含参数),不能有函数体;接口的方法必须是public(默认public)
    5. public function write();
    6. //接口中不能有属性,但可以定义常量
    7. const NAME='胡八一';
    8. //接口不能进行实例化,但可以有构造方法
    9. // public function __construct();
    10. }
    11. //要实现一个接口,使用 implements 操作符,类中必须实现接口中定义的所有方法
    12. class userA implements A{
    13. protected $age=33;
    14. public function write(){
    15. return '姓名:'.A::NAME.',年龄:'.$this->age.'岁';
    16. }
    17. }
    18. echo (new userA)->write().'<hr>';
    19. //2、接口继承、实现多个接口
    20. interface B extends A{
    21. //B接口继承A接口
    22. const NATION='CHINA';
    23. }
    24. interface C extends A,B{
    25. //C接口继承A和B接口
    26. public static function work();
    27. //多个接口进行整合,形成一个统一的接口,再用一个类实现
    28. }
    29. //一个类可以同时实现多个接口,实现多个接口时,接口中的方法不能有重名
    30. //实现类
    31. class userB implements C{
    32. public function write(){
    33. return '姓名:'.A::NAME.',国籍:'.B::NATION;
    34. }
    35. public static function work(){
    36. return __METHOD__;
    37. }
    38. }
    39. echo (new userB)->write().'<br>';
    40. echo (new userB)->work().'<hr>';
    41. // php是典型的单继承式语言
    42. // 接口之间允许继承,并用支持多继承
    43. // 可以有二种实现方案:
    44. // 1)将多个接口进行整合,形成一个统一的接口,然后用一个实现类来实现它
    45. // 2)一个实现类同时实现多个接口,实现类的功能组合,是一种横向功能扩展

  2. 抽象类与interface的区别与联系

    1. //abstract抽象类: 部分的分离了: 设计(抽象类)与实现(工作类)
    2. abstract class user{
    3. protected $name='张三';
    4. //抽象类中的方法可以有抽象方法,也可以有非抽象方法
    5. public function work(){
    6. return __METHOD__;
    7. }//抽象方法:只其调用方式(参数),没有具体的实现过程,即没有函数体
    8. abstract function write();
    9. }
    10. // 抽象类禁止实例化
    11. // 抽象类必须使用它的子类才可以访问/工作
    12. class user1 extends user{
    13. public function write(){
    14. return $this->name;
    15. }
    16. }
    17. echo (new user1)->work().'<br>';
    18. echo (new user1)->write();

  • 抽象类中至少有一个抽象方法,且前面必须加abstract
  • 接口成员的属性只能是常量;接口中的方法都是抽象方法,无函数体,且都必须是public
  • 接口类和抽象类本身均不能实例化,必须通过类进行继承;且继承后必须全部实现所有抽象方法
  1. 抽奖案例
  • 简单抽奖

    1. //设置抽奖接口
    2. interface drawId{
    3. public static function getDrawId($min,$max);
    4. }
    5. //公共方法:实现抽象接口方法
    6. trait tDrawId{
    7. public static function getDrawId($min,$max){
    8. //mt_rand()生成随机整数
    9. return mt_rand($min,$max);
    10. }
    11. }
    12. //实现工作类
    13. class Draw implements drawId{
    14. use tDrawId;
    15. public static function award($prizes,$id){
    16. return $prizes[$id];
    17. }
    18. }
    19. $prizes=['电脑','手机','平板','相机','音箱','耳机','U盘'];
    20. $id=Draw::getDrawId(0,6);
    21. $prize=Draw::award($prizes,$id);//随机输出$prizes中的值
    22. echo '你的奖品是:'.$prize;

  • 双色球

    1. <?php
    2. //抽奖案例:双色球
    3. //设置抽奖接口
    4. interface drawId{
    5. public static function getDrawId($min,$max);
    6. }
    7. //公共方法:实现抽象接口方法
    8. trait tDrawId{
    9. public static function getDrawId($min,$max){
    10. //mt_rand()生成随机整数
    11. return mt_rand($min,$max);
    12. }
    13. }
    14. // 抽象类: 彩票(lottery)
    15. abstract class Lottery implements drawId{
    16. //引入trait
    17. use tDrawId;
    18. //生成中奖需要的编号,$num表示需要的数量
    19. protected static function createBalls($min,$max,$num){
    20. //1、按照开奖规则生成指定步长和数量的编号
    21. //range() 函数创建一个包含指定范围的元素的数组
    22. $allBalls=range($min,$max,1);//1为规定元素之间的步进制。默认是 1
    23. //2、蓝色球,生成$num=1个
    24. //array_rand(array,number):array必需,规定数组;number可选,规定返回多少随机键名
    25. //如果选出的元素不止一个,则返回包含随机键名的数组,否则返回该元素的键名
    26. if($num===1) return $allBalls[array_rand($allBalls)];//array_rand($allBalls)返回的是元素的键名,需要根据键名获取对应的值
    27. //3、红色球:随机6个球的编号
    28. $redBallsKeys=array_rand($allBalls,6);//返回6个随机元素的键名数组
    29. //根据键名获取对应的值
    30. $redBalls=[];
    31. foreach($redBallsKeys as $key){
    32. $redBalls[]=$allBalls[$key];
    33. }
    34. return $redBalls;
    35. }
    36. //抽象方法:生成一个中奖号:6个红色球+1个蓝色球
    37. abstract protected static function doubleBall($redRule,$blueRule);
    38. //抽象方法:生成一组试机号
    39. abstract protected static function doubleBalls($redRule,$blueRule,$range);
    40. }
    41. // 工作类: 抽奖(DrawLottery);用抽象类的子类去实现、访问
    42. class DrawLottery extends Lottery{
    43. //生成一个中奖号:6个红色球+1个蓝色球
    44. public static function doubleBall($redRule,$blueRule){
    45. //红色球规则:[1,33,6],1-33之间取随机6个数
    46. $redBalls=self::createBalls(...$redRule);
    47. sort($redBalls);//sort() 函数对数值数组进行升序排序
    48. //蓝色球规则:[1,16,1],1-16之间取随机1个数
    49. $blueBall=self::createBalls(...$blueRule);
    50. //红色+蓝色组成一个完整的中奖号
    51. //array_push() 向数组尾部插入一个或多个元素
    52. array_push($redBalls,$blueBall);//在$redBalls数组尾部添加一个值$blueBall
    53. //最终7个号码在$redBalls中
    54. return $redBalls;
    55. }
    56. //生成一组试机号
    57. public static function doubleBalls($redRule,$blueRule,$range){
    58. // 随机生成试机号的数量
    59. $count = self::getDrawId(...$range);
    60. $randBalls = [];
    61. for ($i = 0; $i < $count; $i++) {
    62. $randBalls[] = self::doubleBall($redRule, $blueRule);
    63. }
    64. // 返回最终生成一组开奖号
    65. return $randBalls;
    66. }
    67. }
    68. $draw = DrawLottery::doubleBall([1,33,6], [1,16,1]);
    69. // print_r($draw);
    70. $randBalls = DrawLottery::doubleBalls([1,33,6], [1,16,1],[1,6]);
    71. // print_r($randBalls);
    72. ?>
    73. <!DOCTYPE html>
    74. <html lang="en">
    75. <head>
    76. <meta charset="UTF-8">
    77. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    78. <title>双色球开奖啦</title>
    79. <style>
    80. .container{
    81. display:grid;
    82. grid-template-columns:repeat(7,40px);
    83. gap:15px;
    84. margin-bottom:15px;
    85. }
    86. .container >span{
    87. width:30px;
    88. height:30px;
    89. border-radius:50%;
    90. color:#fff;
    91. font-weight:700;
    92. text-align:center;
    93. line-height:30px;
    94. }
    95. .container >span:nth-of-type(-n+6){
    96. background-color:red;
    97. }
    98. .container >span:last-of-type{
    99. background-color:blue;
    100. }
    101. </style>
    102. </head>
    103. <body>
    104. <h2>模拟双色球开奖</h2>
    105. <h3>今日开奖号码: <small><?php echo date('Y年m月d日 H:i:s', time()); ?></small></h3>
    106. <div class="container">
    107. <?php foreach ($draw as $item) :?>
    108. <span><?php echo $item ?></span>
    109. <?php endforeach ?>
    110. </div>
    111. <h3>今日试机号: </h3>
    112. <?php foreach ($randBalls as $draws) :?>
    113. <div class="container">
    114. <?php foreach ($draw as $item) :?>
    115. <span><?php echo $item ?></span>
    116. <?php endforeach ?>
    117. </div>
    118. <?php endforeach ?>
    119. </body>
    120. </html>

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议