PHP致命错误:无法访问空属性

Posted

技术标签:

【中文标题】PHP致命错误:无法访问空属性【英文标题】:PHP Fatal error: Cannot access empty property 【发布时间】:2013-02-01 22:25:09 【问题描述】:

我是php 的新手,我已经执行了以下代码。

<?php
class my_class

    var $my_value = array();
    function my_class ($value)
        $this->my_value[] = $value;
    
    function set_value ($value)
    // Error occurred from here as Undefined variable: my_value
        $this->$my_value = $value;

    



$a = new my_class ('a');
$a->my_value[] = 'b';
$a->set_value ('c');
$a->my_class('d');

foreach ($a->my_value as &$value) 
    echo $value;


?>

我得到以下错误。可能是什么错误?

Notice: Undefined variable: my_value in C:\xampp\htdocs\MyTestPages\f.php on line 15

Fatal error: Cannot access empty property in C:\xampp\htdocs\MyTestPages\f.php on line 15

【问题讨论】:

如果您只是学习 PHP,请寻找更多最新的教程...var 的使用和与类同名的方法表明相当古老,过时的教程 @MarkBaker 感谢您的指示。 【参考方案1】:

您以错误的方式访问该物业。使用$this-&gt;$my_value = .. 语法,您可以使用$my_value 中的值名称设置属性。你要的是$this-&gt;my_value = ..

$var = "my_value";
$this->$var = "test";

相同
$this->my_value = "test";

为了解决您的示例中的一些问题,下面的代码是一种更好的方法

class my_class 

    public  $my_value = array();

    function __construct ($value) 
        $this->my_value[] = $value;
    

    function set_value ($value) 
        if (!is_array($value)) 
            throw new Exception("Illegal argument");
        

        $this->my_value = $value;
    

    function add_value($value) 
        $this->my_value = $value;
    


$a = new my_class ('a');
$a->my_value[] = 'b';
$a->add_value('c');
$a->set_value(array('d'));

这样可以确保 my_value 在您调用 set_value 时不会将其类型更改为字符串或其他内容。但是您仍然可以直接设置 my_value 的值,因为它是公开的。最后一步是,将 my_value 设为私有,并且只能通过 getter/setter 方法访问 my_value

【讨论】:

然后我收到错误消息Fatal error: [] operator not supported for strings in C:\xampp\htdocs\MyTestPages\f.php on line 12。第 12 行是$this-&gt;my_value[] = $value; 当然.. set_value 将类型从 my_value 从数组更改为字符串。可能你想把 set_value 里面的代码改成$this-&gt;my_value[] = $value;【参考方案2】:

首先,不要使用var声明变量,而是

public $my_value;

然后您可以使用它访问它

$this->my_value;

而不是

$this->$my_value;

【讨论】:

【参考方案3】:

要访问类中的变量,您必须使用$this-&gt;myVar 而不是$this-&gt;$myvar

而且,您应该使用访问标识符来声明变量,而不是 var

请阅读文档here。

【讨论】:

然后我收到错误消息Fatal error: [] operator not supported for strings in C:\xampp\htdocs\MyTestPages\f.php on line 12。第 12 行是$this-&gt;my_value[] = $value; 你不能调用$this-&gt;my_value[]你应该在[]中有一个值。【参考方案4】:

正如我在您的代码中看到的,您似乎正在关注关于基于 PHP4 的 PHP 中 OOP 的旧文档/教程(OOP 不受支持,但以某种简单的方式进行了调整),因为 PHP5 是官方支持已添加并且符号已更改。

请在此处查看此代码审查:

<?php
class my_class

    public $my_value = array();

    function __construct( $value )  // the constructor name is __construct instead of the class name
        $this->my_value[] = $value;
    
    function set_value ($value)
    // Error occurred from here as Undefined variable: my_value
        $this->my_value = $value; // remove the $ sign
    



$a = new my_class ('a');
$a->my_value[] = 'b';
$a->set_value ('c'); // your array variable here will be replaced by a simple string 
// $a->my_class('d'); // you can call this if you mean calling the contructor 


// at this stage you can't loop on the variable since it have been replaced by a simple string ('c')
foreach ($a->my_value as &$value)  // look for foreach samples to know how to use it well
    echo $value;


?>

希望对你有帮助

【讨论】:

【参考方案5】:

有趣:

    你声明了一个数组var $my_value = array(); 将价值推入其中$a-&gt;my_value[] = 'b'; 为变量分配了一个字符串。 (所以它不再是数组)$a-&gt;set_value ('c'); 试图将一个值压入数组,但该值已不存在。 (是字符串)$a-&gt;my_class('d');

而你的foreach 将不再工作。

【讨论】:

【参考方案6】:

这样您可以创建一个具有自定义属性名称的新对象。

$my_property = 'foo';
$value = 'bar';
$a = (object) array($my_property => $value);

现在你可以像这样到达它:

echo $a->foo;  //returns bar

【讨论】:

会更详细..!【参考方案7】:

我意识到这个答案不是对 OP 描述的问题的直接回应,但我在搜索相同的错误消息时发现了这个问题。我认为值得在这里发布我的经验,以防万一有人对同样的事情感到困惑......

由于在关联数组上的for 循环格式不正确,您可能会遇到相关错误。出于头脑清醒,我在 for 声明中使用 -> 而不是 =>:

        foreach ($object->someArray as $key->$val) 
            // do something
        

当然,我应该有:

        foreach ($object->someArray as $key=>$val) 
            // do something
        

一开始我很困惑,以为报告的错误是指 someArray 属性!

【讨论】:

以上是关于PHP致命错误:无法访问空属性的主要内容,如果未能解决你的问题,请参考以下文章

phpMyAdmin:PHP 致命错误 - 无法重新声明 PMA_checkLink()

TypeError:错误 #1009:无法访问空对象的属性或方法

Actionscript 3 错误 1009:无法访问空对象引用的属性或方法

SyntaxError:错误 #1009:无法访问空对象引用的属性或方法

错误 #1009:无法访问空对象引用的属性或方法。 [好郁闷]

TypeError:错误 #1009:无法访问空对象引用的属性或方法。尝试创建按钮时。