Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Syntax PHP中类方法中使用的未定义变量没有错误_Syntax_Syntax Error_Php - Fatal编程技术网

Syntax 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

我花了10多个小时来找出调试PHP程序的错误。我希望PHP在使用未定义的变量时会产生错误。但当它被用作方法中的对象时,它不会。有什么原因吗

<?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中未定义的值不是错误。如果启用了正确级别的显示错误/错误报告,它们只会生成警告。请确保错误报告中包含通知,并设置自定义错误处理程序,在报告任何错误(无论是通知、警告还是实际错误)后中止所有处理。然后准备修复大量突然开始抛出通知的代码。我希望它将来会被修复。谢谢大家。