我在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
答案 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']