I spent more than 10 hours to find out the typo for debugging my PHP program. I expected PHP would produce an error when using an undefined variable. But when it is used as an object in a method, it doesn’t. Is there a reason for it?
<?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.
}
}
?>
Normally if the error reporting level is set to
E_ALL | E_STRICT(orE_ALLas of PHP 5.4.0) it should spit out an E_STRICT error. For instance, this code:Produces:
Interestingly enough, if you specifically create an array instead of an ordinary variable as a property of an object that doesn’t exist, e.g.:
No strict standards error is shown! It looks like this could potentially be something PHP folks might want to fix, because I’m not aware this is documented nor I think there’s a legitimate reason for this behaviour.
For the record, in both cases regardless of the error a new stdClass is being created on the fly instead, like sberry mentions in his answer.