Syntax PHP中类方法中使用的未定义变量没有错误
我花了10多个小时来找出调试PHP程序的错误。我希望PHP在使用未定义的变量时会产生错误。但当它被用作方法中的对象时,它不会。有什么原因吗Syntax PHP中类方法中使用的未定义变量没有错误,syntax,syntax-error,php,Syntax,Syntax Error,Php,我花了10多个小时来找出调试PHP程序的错误。我希望PHP在使用未定义的变量时会产生错误。但当它被用作方法中的对象时,它不会。有什么原因吗 <?php $oClass = new MyClass; // $oCless->tihs('key', 'taht'); //<-- triggers the error: Notice: Undefined variable $oClass->tihs('key', 'taht'); ech
<?php
$oClass = new MyClass;
// $oCless->tihs('key', 'taht'); //<-- triggers the error: Notice: Undefined variable
$oClass->tihs('key', 'taht');
echo $oClass->arr['key'];
class MyClass {
public $arr = array('key' => 'foo');
function tihs($key, $value) {
$tihs->arr[$key] = $value; //<-- this does not cause an error message.
}
}
?>
您似乎将$oClass
错写为$oCless
这是因为PHP欺骗
实际上,PHP正在创建一个名为tihs
的对象,在名为arr
的对象中添加一个数组,并将key
设置为value
这是一个print\r($tihs)代码>分配后:
stdClass Object
(
[arr] => Array
(
[key] => taht
)
)
同意,$oCless而不是$oClass会给您一个未定义的变量错误
此外,“this”在大多数语言中是一个关键字,在php中也可能是。你应该避免使用它,以免它在其他语言中成为一种习惯。如果将“this”用作函数名和变量名,则会出现更多错误。你甚至连要编译的东西都没有 通常,如果错误报告级别设置为E|u ALL | E|u STRICT
(或从PHP5.4.0起设置为E|u ALL
),则应显示E|u STRICT错误。例如,此代码:
error_reporting(E_ALL | E_STRICT);
$tihs->adrr = 453;
产生:
Strict Standards: Creating default object from empty value in [...]
有趣的是,如果您专门创建一个数组而不是一个普通变量作为不存在的对象的属性,例如:
error_reporting(E_ALL | E_STRICT);
$tihs->adrr[25] = 453;
没有显示严格的标准错误!看起来这可能是PHP人员想要解决的问题,因为我不知道这是有文档记录的,也不认为这种行为有合法的原因
记录在案,在这两种情况下,不管发生什么错误,都会动态创建一个新的,就像sberry在中提到的。拼写错误的“this”非常令人困惑,有一个名为“this”的函数也非常令人困惑PHP中未定义的值不是错误。如果启用了正确级别的显示错误/错误报告,它们只会生成警告。请确保错误报告中包含通知,并设置自定义错误处理程序,在报告任何错误(无论是通知、警告还是实际错误)后中止所有处理。然后准备修复大量突然开始抛出通知的代码。我希望它将来会被修复。谢谢大家。