在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
是否true
或false
,如果它发现YII_DEBUG
已被设置为true
或false
其他地方,那么它不会执行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/myAction
到www.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
。