代码之家  ›  专栏  ›  技术社区  ›  jantimon

PHP中的严格模式?

  •  59
  • jantimon  · 技术社区  · 14 年前

    通过激活这个严格模式,变量声明是必需的,一旦您试图使用未声明的变量,Perl就会抛出一个错误。

    PHP是否提供了类似的特性?

    10 回复  |  直到 4 年前
        1
  •  67
  •   Top-Master Satpal    5 年前

    E_NOTICE 你的水平 error reporting . (常量列表 here .)

    使用未声明变量的每个实例都会抛出 紧急通知

    这个 E_STRICT 错误级别还会抛出这些通知,以及关于如何优化代码的其他提示。

    error_reporting(E_STRICT);
    

    终止脚本

    如果你真的很认真,希望你的剧本 终止 当遇到未声明的变量时,您可以构建一个 custom error handler .

    紧急通知 ,并将其他所有内容传递给默认的PHP错误处理程序:

    <?php
    
    error_reporting(E_STRICT);
    
    function terminate_missing_variables($errno, $errstr, $errfile, $errline)
    {                               
      if (($errno == E_NOTICE) and (strstr($errstr, "Undefined variable")))
       die ("$errstr in $errfile line $errline");
    
      return false; // Let the PHP error handler handle all the rest  
    }
    
    $old_error_handler = set_error_handler("terminate_missing_variables"); 
    
    echo $test; // Will throw custom error
    
    xxxx();  // Will throw standard PHP error
    
     ?>
    
        2
  •  40
  •   dialogik    9 年前

    使用

    error_reporting(-1);
    

    显示所有可能的错误,包括 E_STRICT

    ( Reference

        3
  •  8
  •   Peter Mortensen rohan kamat    4 年前

    几年后,PHP7.0.0已经 获得 declare(strict_types=1) .

        4
  •  3
  •   chelmertz user1604064    14 年前

    是的,类型 error_reporting(E_STRICT|E_ALL); 在你剧本的开头。

        5
  •  2
  •   gblazex    14 年前

    你可以查一下 error_reporting ,别忘了设置 display_errors 也。 请注意,有多个级别的错误报告。

        6
  •  1
  •   selfawaresoup    14 年前

    您可以使用实现自己的错误处理功能 set_error_handler() .

    例如,如果变量声明不正确或者满足了任何您不喜欢的条件,则可以终止脚本,而不只是显示和记录错误消息。

        7
  •  1
  •   Peter Mortensen rohan kamat    4 年前

    error_reporting(E_ALL);
    

    在PHP代码的开头。

    或者在php.ini文件中设置错误报告设置,以便为所有php文件设置它。

        8
  •  1
  •   Peter Mortensen rohan kamat    4 年前

    菲律宾比索 默认情况下警告未声明的变量;你只需要打开 error reporting 调平,这样你就能看到通知了。请注意,由于在PHP中没有特殊的语法来声明变量,您只需通过赋值来声明一个变量,因此它只能在您尝试声明变量时发出警告 一个未声明的变量。与其他语言不同,“未声明变量的赋值”是不存在的,因此PHP不能在那里警告您。

        9
  •  0
  •   Palantir    14 年前

    是的,你可以通过错误报告来实现。

    http://www.php.net/manual/en/function.error-reporting.php

        10
  •  0
  •   Peter Mortensen rohan kamat    4 年前

    是的,你可以从PHP7.X开始,

    declare(strict_types=1);
    

    这将强制所有标量类型声明对类型严格。

    但如果全局启用此功能,则可能会影响其他第三方模块(例如, PHP Composer

        11
  •  0
  •   Peter Mortensen rohan kamat    4 年前

    我建议报告和处理错误的要求在开发环境和实际生产环境(WWW、公司内部网等)中有所不同。在开发过程中,你会希望看到尽可能多的细节来发现和解决问题。

        12
  •  -1
  •   Peter Mortensen rohan kamat    4 年前

    error_reporting(E_STRICT);
    

    我想你应该试试上面这个。