php 7.2中未定义的常量错误

时间:2018-01-13 03:49:10

标签: php

我在php +-----+-------+----------+----------+ | id | name | gender | computer | +-----+-------+----------+----------+ | 1 | ben | boy | pc | +-----+-------+----------+----------+ 中有这些错误,但在使用php v7.2时看不到任何E_WARNING

如何解决以下错误?

  第39行的

/web13/web/boutique/includes/Sites/Shop/NavigationHistory.php           [12-Jan-2018 22:44:20 America / Toronto] PHP警告:使用未定义的常量MODULE_HEADER_SELECT_TEMPLATE_STATUS - 在/ var / www / clients / client1中假设'MODULE_HEADER_SELECT_TEMPLATE_STATUS'(这将在PHP的未来版本中引发错误)第356行/web13/web/boutique/includes/Sites/Shop/Template.php

4 个答案:

答案 0 :(得分:4)

每当PHP检测到未定义constant的使用时,就会发生这种常见警告。

以下是PHP中定义常量的示例:

define('PI', 3.14);

以下列出了可能导致此问题的一些案例:

  • 忘记在变量名称的开头使用$符号。

    $name = "Aniket";
    echo name; // forgot to add $ before name
    

    上面的代码将抛出:注意:使用未定义的常量名称 - 假设'name'。因为变量“name”前面没有美元符号,所以PHP假定我试图引用一个名为“name”的常量变量。

  • 忘记在字符串周围放置引号。

    echo $_POST[email];
    

    在上面的示例中,我未能在$_POST变量“email”周围添加引号。此代码将抛出:注意:使用未定义的常量名称 - 假定为'email'

    要解决此问题,我显然必须执行以下操作:

    echo $_POST["email"];
    

根据Deprecated features in PHP 7.2.x,你不应该使用未定义的常量,因为:

  

不存在的全局常量的不带引号的字符串被视为它们自己的字符串。

     

此行为用于发出 E_NOTICE ,但现在会发出 E_WARNING 。在PHP的下一个主要版本中,将抛出Error异常。

只有在使用之前声明常量值,才能阻止此E_WARNING

在上述问题中,MODULE_HEADER_SELECT_TEMPLATE_STATUS未定义。

答案 1 :(得分:2)

此外,对于那些刚接触wordpress Plugin开发的人来说,似乎无法弄清楚定义" Constant"在它使用之前...

以下是抛出错误的示例:

add_action('wp_enqueue_scripts', myprefix_load_styles);

直接在钩子中声明一个函数就是生成这样的错误的一种方法。 代替:

add_action('wp_enqueue_scripts', 'myprefix_load_styles');

注意,函数名称现在在引号内。 这应该有用,如果这是你的情况。

答案 2 :(得分:1)

我刚刚创建了一个PHP作业,以递归方式清理PHP项目中的所有文件,并自动引用所有字符串,这些字符串是在方括号内用于数组语法的未定义常量。

观察:此修复仅针对$ a [key1]之类的数组用法,该用法将自动转换为$ a ['key1']。清理过程不会解析和计算项目中已定义常量的列表,以便将它们白名单使用,而在所有可能的上下文中都没有引号。

建议先在DEV上为您的项目运行它,检查功能,然后再上线。

快速用法:

git clone https://github.com/eyroot/lx-utils lx-utils
cd lx-utils && composer install --no-dev
php run/cleanUpSquareBrackets.php /path/you/want/to/clean/up

完整的使用说明和源代码在页面上:
https://github.com/eyroot/lx-utils

答案 3 :(得分:0)

简写搜索替换记事本++的正则表达式

for array(test=>'bla')
Search: ([ (\t])([aA-zZ]+)([\t ]*=>)
Replace: \1'\2'\3
for [test] 
Search \[([aA-Zz]+)\]
Replace:['\1']
相关问题