跳转到主要内容
toto多背一公斤 提交于 20 April 2013

调整错误报告级别

Drupal 6.x版本中,在正式运行的站点中,忽略 E_NOTICE,E_STRICT,和 E_DEPRECATED 的notice级别错误。想要查看所有PHP开发或测试网站上的错误,你可以更改includes/common.inc文件。

<?php
  if ($errno & (E_ALL ^ E_DEPRECATED ^ E_NOTICE)) {
?>

改为:

<?php
  if ($errno & (E_ALL | E_STRICT)) {
?>

Drupal的7.x版中,可以给出任何错误级别的E_ALL报告,并允许PHP设置报告的错误级别,例如E_STRICT。在开发或测试站上,要查看所有PHP的错误,你可以在 .htaccess文件中进行设置:

php_value error_reporting -1

使用 isset() or !empty() 函数

如果你想测试一个变量的值,或数组元素,或对象的属性,你可能需要使用:

<?php
 if (isset($var)) 
?>

<?php
 if (!empty($var)) 
?>

而不是

<?php
 if ($var) 
?>

如果有一种可能性,$var的还没有被定义。

isset() 和!empty()之间的差异是,当变量被设置为空字符串或零时,isset()函数将返回TRUE,而!empty()将返回FALSE。决定去使用哪一个函数来判读,取决于考虑空值' '或0,是否有效,或是不是变量预期的值。

下面的代码可能会引发一个E_NOTICE级别的错误:

<?php function _form_builder($form, $parents = array(), $multiple = FALSE) { // (...) if ($form['#input']) { // some code (...) } } ?>

在上面的代码中,变量$form传递给函数。如果$form['#input']输入的值为TRUE时,代码被执行。然而,如 果$form['#input']不存在时,函数会输出以下错误信息:notice: Undefined index: #input in includes/form.inc on line 194.。

即使数组$form已经声明,并传递给函数,每个数组键值必须明确声明。前面的代码应该修改为:

<?php function _form_builder($form, $parents = array(), $multiple = FALSE) { // (...) if (!empty($form['#input'])) { // some code (...) } } ?>

提示

该变量被设置为0时,isset()函数返回TRUE。但是,如果该变量被设置为NULL,isset()函数返回FALSE。在某些情况下,IS_NULL()是更好的选择,特别是当测试由SQL查询返回的变量值时。