美文网首页
php学习日志--2019-4-29

php学习日志--2019-4-29

作者: sgdream | 来源:发表于2019-04-30 16:48 被阅读0次

  • 内容:
    · 返回值类型声明
    · null合并运算符
    · declare

  • 在php7中增加了返回值类型声明

    • 示例1:

    • <?php
        function helloWorld():string
        {
          return("HelloWord");
        }
          function helloWorld1():string
        {
          return(1);
        }
          var_dump(helloWorld());//string(9) "HelloWord"
          var_dump(helloWorld1());//string(1) "1"
      //需要注意的是 如果当前设置为严格模式则会报错
      
  • null合并运算符

    • 如果变量存在且值不为NULL,它就会返回自身的值,否则返回它的第二个操作数。
    <?php
      $a = $_GET['a'] ?? 'a';
      //等同于
      $a = isset($_GET['a']) ? $_GET['a'] :'a';
      //简单解释就是: 当$_GET['a'] 不存在时候则将 $a 赋值为 'a';
      print_r('$a= '.$a);
      // 例如:
      // https://******/index.php?a=test
      // 输出 $a= test
      // https://******/index.php
      // 输出 $a= a
    

declare命令

例子:

declare 代码段中的 statement 部分将被执行——怎样执行以及执行中有什么副作用出现取决于 directive 中设定的指令。

declare 结构也可用于全局范围,影响到其后的所有代码(但如果有 declare 结构的文件被其它文件包含,则对包含它的父文件不起作用)。

declare 调试内部程序使用.
先简单说明,declare这个函数支持ticks,函数表示记录程序块,需配合register_tick_function 函数使用。ticks参数表示运行多少语句调用一次register_tick_function的函数。并且declare支持两种写法:

  1. declare(ticks = 1); 整个脚本

  2. declare(ticks = 1) { 内部的代码做记录

    }
    上述代码除了 函数体内,外部都会被执行,运行可以看执行次数和时间. 他跟适合做测试代码段中每一步分的执行时间 和执行次数.
    declare 必须是全局的,放在程序外部.

不是所有语句都可计时。通常条件表达式和参数表达式都不可计时。
tick 代表一个事件,事件的定义是在register_tick_function;事件的执行频率是在(ticks=3)。
表示事件频率是执行3个才记录一次. microtime() 的打印时间.

//需要在文件开头
//strict_types指令只影响指定使用的文件,不会影响被它包含(通过include等方式)进来的其他文件

declare(strict_types=1);// 严格模式下
declare(strict_types=0);// 弱校验模式

<?php

    declare (ticks = 1); //这句这么写表示全局的脚本都做处理

    function foo() { //注册的函数

        static $no;

        $no++;

        echo $no."======";

        echo microtime()."\n";

    } 

    register_tick_function("foo"); //注册函数,后面可以跟第2个参数,表示函数的参数

    $a = 1;

    for($i=0;$i<5;$i++) { //这里的循环也是语句,会做一次判断$i<5的判断执行

        $b = 1;

    }

?>
  • 拓展延伸//设置declare(strict_types=1);
  •   //strict_types.php
      <?php
      declare(strict_types=1);//强制模式
      function helloWorld():string
      {
          return("HelloWord");
      }
      function helloWorld1():string
      {
          return(1);
      }
      //var_dump(helloWorld());//输出:string(9) "HelloWord"
      //var_dump(helloWorld1());//当设置非强制模式时候输出: string(1) "1"
      /*
       *  当设置成 declare(strict_types=1); 时候如果返回值与返回值类型声明 不一致则会报错如下:
       *  Fatal error: Uncaught TypeError: Return value of helloWorld1() must be of the type string, int returned
       *  当 declare(strict_types=1); 后设置有error_reporting(0)时候则不会输出return值
       */
      // 文件包含测试:
      /*
       * 经过测试:当include其他文件时候如果被include的文件头部不设置 declare(strict_types=1)时候不会受到本文件的影响
       */
      include_once "strict_types1.php";
      var_dump(helloWorld3());//直接输出:string(1) "3" 不会受到declare(strict_types=1) 的影响
      
      /*  测试说明:
       *  当作为主文件使用declare函数,被引用的文件中没有declare时候
       *  调用被引用的文件中的函数时候
       *  无论是在被引用的文件中进行 function 的调用,还是 在本文件中进行调用,都不会受到 declare(strict_types=1); 的影响
       *  注明:strict_types指令只影响指定使用的文件,不会影响被它包含(通过include等方式)进来的其他文件
       */
      
      ?>
      //strict_types1.php 内容如下
      <?php
      function helloWorld3():string
      {
          return(3);
      }
      var_dump(helloWorld3());//直接输出:string(1) "3"
      
    

相关文章

网友评论

      本文标题:php学习日志--2019-4-29

      本文链接:https://www.haomeiwen.com/subject/oubvnqtx.html