"defined('YII_DEBUG') or"在"defined('YII_DEBUG') or define('YII_DEBUG', false);"有什么用?

  • 本文关键字:DEBUG YII or defined define false yii yii2
  • 更新时间 :
  • 英文 :


defined('YII_DEBUG') or define('YII_DEBUG', false);行代码中,我们正在检查调试之前是否定义了它什么都不做,但如果没有,它将设置为 false .

我不明白这一点,我的意思是如果我们想覆盖以前的值怎么办,为什么我们不能简单地做define('YII_DEBUG', false);为什么如果我们不想使用它,就必须检查以前的值?

我没有这样做,但你不清楚我的问题,我们只能更改/web/index.php 中的YII_DEBUG值。 还有一件事,如果YII_DEBUG在其他任何地方都定义了,但在那之后,如果我们想改变它的值该怎么办,因为"or"不会改变它,它也是常数,所以不能改变它的值?


是的,你大错特错了...您可以在所需的任何位置声明 YII_DEBUG 值,但是...如果重新定义:注意:常量YII_DEBUG已在...我认为这就是定义((或...防止此错误

您只需

执行以下操作即可将其更改为true或即时false页面:

define('YII_DEBUG', true);

在这种情况下,defined('YII_DEBUG') or define('YII_DEBUG', false);派上用场,它会检查YII_DEBUG是否truefalse,如果它发现YII_DEBUG已被设置为truefalse其他地方,那么它不会执行or部分。

defined('YII_DEBUG') or define('YII_DEBUG', true);相当于

if (!defined('YII_DEBUG')) {
    define('YII_DEBUG', true);
}

因此,您会看到它会检查YII_DEBUG是否已在其他地方定义,如果没有,则在这种情况下设置为true

编辑:

要动态调试任何页面,您可以执行以下操作:

if (isset($_GET['debug'])) define('YII_DEBUG', true);

当然,您将不得不更改您的URL,例如:

www.example.com/site/myActionwww.example.com/site/myAction/debug/true并将其从index.php中删除

编辑2:

index.php中定义YII_DEBUG不是强制性的,它是在Yii应用程序中定义的,您可以在根yii.php文件中找到它,以防Yii2,如果Yii1它在framework/YiiBase.php中定义

<?php
  defined('YII_DEBUG') or define('YII_DEBUG', true);
  defined('YII_ENV') or define('YII_ENV', 'dev');

yourApp/web/index.php中定义

此成本定义了调试信息的级别。在开发环境中,通常此标志设置为 true,然后在发生错误时,会显示有关错误的详细信息和错误代码,如果为 false,则不显示或显示很少的信息。

在生产环境中,此成本被设置为假。 因此,减去信息将向用户显示。

对于已定义或定义

是成本已经定义不需要定义否则 PHP 定义 constat. 请参阅 PHP 文档 http://php.net/manual/en/function.defined.php defined — Checks whether a given named constant exists

您可以在 Yii2 文档中找到更多信息 http://www.yiiframework.com/doc-2.0/guide-runtime-handling-errors.html

错误处理程序根据常量YII_DEBUG的值调整错误显示。当YII_DEBUG为 true(表示在调试模式下(时,错误处理程序将显示异常,其中包含详细的调用堆栈信息和源代码行,以帮助更轻松地进行调试。当YII_DEBUG为 false 时,只会显示错误消息,以防止泄露有关应用程序的敏感信息。

看看YII_DEBUG和YiiBase.php和yii.php

defined('YII_DEBUG') or define('YII_DEBUG', false)检查常量YII_DEBUG是否已定义(无论其值如何(,如果之前未定义,则将其常量定义为false

该行确保常量被定义,以便可以使用,它的第一部分(defined('YII_DEBUG') or(确保这条线不会覆盖它,如果它被设置为更早true false

最新更新