2

我之前有的是...

if(DEBUGMODE) $debug_err_msgs[] = 'Some error'; // add a new error to the array

... more code here...

if(DEBUGMODE)$debug_err_msgs[] = 'Some error'; // add a new error to the array

除了功能之外,它的效果很好。所以...我决定使用 $_GLOBALS 数组使其成为 GLOBAL 。我最初喜欢我选择的第一种方法,因为它不断添加到数组中,我可以稍后转储它以查看发生了什么。使用$_GLOBALS['debug_err_msgs']and$_GLOBALS['errorh_string']迫使我.=将字符串(附加)到前一个(这没关系。 ..我不认为您可以去...$_GLOBALS['something'][]并像更改代码之前那样继续添加到数组中。所以..我进行了如下更改...

PHP

<?php
error_reporting(E_ALL);
set_error_handler("ErrorHandler");

$_GLOBALS['errorh_string'] = "";
if(DEBUGMODE) $_GLOBALS['debug_err_msgs'] = "";
if(DEBUGMODE) $_GLOBALS['debug_err_msgs'] .= 'La la la, some errors';
if(DEBUGMODE) $_GLOBALS['debug_err_msgs'] .= 'more errors... etc';

function ErrorHandler($errno, $errstr, $errfile, $errline)
{
    // if ($errno == 8) return;// 8 is undefined variables
    $error = "<b>Error[</b>$errno<b>] </b>$errstr<br />";
    $_GLOBALS['errorh_string'] .= $error; // append new error to the global string
    return true;    // dont execute the php internal error handler
}
?>

我收到的错误

注意:未定义的索引:第 14 行 /debugOpenBlock.php 中的 errorh_string

注意:未定义的索引:第 14 行 /debugOpenBlock.php 中的 errorh_string

在上面的代码中,在函数内部

$_GLOBALS['errorh_string'] .= $error; // GIVES ME UNDEFINED

这是奇怪的...如果我将行改为阅读...

$_GLOBALS['errorh_string'] = $error; // NO ERROR NOW

我什至试过

$_GLOBALS['errorh_string'] = $_GLOBALS['errorh_string'] . $error; // GIVES ME UNDEFINED

如果'errorh_string'是文字?为什么我在里面没有定义.!?!??! 我错过了一些关于全球的东西吗?

当我写这篇文章时,我在想我可以使用

global $debug_err_msg[]; // make this array global

而不是将我所有的代码更改为我现在拥有的方式但是......我很好奇这个问题现在是什么......我讨厌不知道一些事情:)

顺便说一句 - 我最近刚刚在 PHP.INI 文件中关闭了 register_globals。这可能与它有什么关系吗(注意:我从来没有使用 $_SESSION['somevariable'] 作为 $somevariable (主要是因为我不知道你可以这样做,但是......无论如何都无所谓))。

我已经阅读了很多关于 superglobals、register_globals 等的文章,但没有任何关于这一点的信息。

等待智慧哦,比我更伟大的网络开发人员:)

4

1 回答 1

1

我找不到另一个问题,所以问题似乎是你使用了错误的变量名。它被称为$GLOBALS$_GLOBALS与输入数组不同。(它不受 register_globals 设置的影响。)

 global $debug_err_msg;

您实际上应该更喜欢这种方法。这使得使用变量比使用$GLOBALS[]访问更清晰,并且还表明您有意共享该变量。

于 2012-01-03T07:37:38.923 回答