我今天在看一本php和MySql范例精讲的书 里面有一段代码没有看懂.我看的是一个注册系统的代码其中的一个文件的内容如下:
<?php
// set true if production environment else false for development
define ('IS_ENV_PRODUCTION', true);
// configure error reporting options
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', !IS_ENV_PRODUCTION);//
ini_set('error_log', 'log/phperror.txt');//设置错误日志的错放位置
// set time zone to use date/time functions without warnings
date_default_timezone_set('America/New_York');//设置时区
// compensate for magic quotes if necessary
if (get_magic_quotes_gpc())
{
    function _stripslashes_rcurs($variable, $top = true)
    {
        $clean_data = array();
        foreach ($variable as $key => $value)
        {
            $key = ($top) ? $key : stripslashes($key);
            $clean_data[$key] = (is_array($value)) ?
                stripslashes_rcurs($value, false) : stripslashes($value);
        }
        return $clean_data;
    }
    $_GET = _stripslashes_rcurs($_GET);
    $_POST = _stripslashes_rcurs($_POST);
    // $_REQUEST = _stripslashes_rcurs($_REQUEST);
    // $_COOKIE = _stripslashes_rcurs($_COOKIE);
}
?>
这是一个公共文件的代码,其他的所有的文件都包含了这个文件.里面有基础不懂的地方: $clean_data[$key] = (is_array($value)) ? stripslashes_rcurs($value, false) : stripslashes($value);这是第二个冒号表达式其中stripslashes_rcurs这个函数定义的时候是有下划线的_stripslashes_rcurs为什么都用的时候没有了呢??
 
我经反复核查我没写错代码!!!  请高手解答

解决方案 »

  1.   

    写错了,这个位置会出错的
    你可以在你的网址后面加上“?a[]=7&a[]=3”测试一下
      

  2.   

    将你的第一句改成
    define ('IS_ENV_PRODUCTION', false);
    不然不会显示错误
      

  3.   

    我实验了一下,并没有错误。当我在冒号表达式的函数调用前加上_时也没有错误。但当我在$_GET = _stripslashes_rcurs($_GET);$_POST = _stripslashes_rcurs($_POST);这两句函数调用中去掉_时显示错误。也许是php语言的问题。
      

  4.   

    难道是php版本问题?我的是PHP 5.2.5,会报错的
    你要带上这种数组参数才会报错“?a[]=7&a[]=3”
      

  5.   

    个人认为原意应该是递归,而没有加下划线应该是错误的,没加下划线应该就是另一个函数了。
    测试如下(我环境的get_magic_quotes_gpc是off的) 测试参数为xxxx.php?a=1:<?php
    define ('IS_ENV_PRODUCTION', true);
    error_reporting(E_ALL | E_STRICT);
    ini_set('display_errors', !IS_ENV_PRODUCTION);//
    ini_set('error_log', 'log/phperror.txt');//设置错误日志的错放位置
    date_default_timezone_set('America/New_York');//设置时区if (!get_magic_quotes_gpc()){
        echo "START<br>";
        function test(){
    echo "TEST!!!!<br>";
        }    function _stripslashes_rcurs($variable, $top = true){
      echo "<br>进入 _stripslashes_rcurs<br>";
      $clean_data = array();   foreach ($variable as $key => $value){
    echo "<br>进入for <br>";
     $key = ($top) ? $key : stripslashes($key);
     $clean_data[$key] = (!is_array($value)) ? _stripslashes_rcurs($value, false) : stripslashes($value);
      }
      return $clean_data;
      }  $_GET = _stripslashes_rcurs($_GET);
      //$_POST = _stripslashes_rcurs($_POST);
      // $_REQUEST = _stripslashes_rcurs($_REQUEST);
      // $_COOKIE = _stripslashes_rcurs($_COOKIE);}打印结果:
    /*********************/
    START进入 _stripslashes_rcurs进入for进入 _stripslashes_rcurs
    /***********************/如果将_stripslashes_rcurs换成stripslashes_rcurs,则不会进入_stripslashes_rcurs函数。
      

  6.   

    <?php
    define ('IS_ENV_PRODUCTION', true);
    error_reporting(E_ALL | E_STRICT);
    ini_set('display_errors', !IS_ENV_PRODUCTION);//
    ini_set('error_log', 'log/phperror.txt');//设置错误日志的错放位置
    date_default_timezone_set('America/New_York');//设置时区if (!get_magic_quotes_gpc()){
        echo "START<br>";
        function test(){
        echo "TEST!!!!<br>";
        }    function _stripslashes_rcurs($variable, $top = true){
          echo "<br>进入 _stripslashes_rcurs<br>";
          $clean_data = array();      foreach ($variable as $key => $value){
            echo "<br>进入for <br>";
             $key = ($top) ? $key : stripslashes($key);
             $clean_data[$key] = (!is_array($value)) ? _stripslashes_rcurs($value, false) : stripslashes($value);
          }
          return $clean_data;
      }  $_GET = _stripslashes_rcurs($_GET);
      //$_POST = _stripslashes_rcurs($_POST);
      // $_REQUEST = _stripslashes_rcurs($_REQUEST);
      // $_COOKIE = _stripslashes_rcurs($_COOKIE);}