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->$my_value = ..
语法,您可以使用$my_value 中的值名称设置属性。你要的是$this->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->my_value[] = $value;
当然.. set_value 将类型从 my_value 从数组更改为字符串。可能你想把 set_value 里面的代码改成$this->my_value[] = $value;
【参考方案2】:
首先,不要使用var声明变量,而是
public $my_value;
然后您可以使用它访问它
$this->my_value;
而不是
$this->$my_value;
【讨论】:
【参考方案3】:要访问类中的变量,您必须使用$this->myVar
而不是$this->$myvar
。
而且,您应该使用访问标识符来声明变量,而不是 var
。
请阅读文档here。
【讨论】:
然后我收到错误消息Fatal error: [] operator not supported for strings in C:\xampp\htdocs\MyTestPages\f.php on line 12
。第 12 行是$this->my_value[] = $value;
你不能调用$this->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->my_value[] = 'b';
为变量分配了一个字符串。 (所以它不再是数组)$a->set_value ('c');
试图将一个值压入数组,但该值已不存在。 (是字符串)$a->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:无法访问空对象引用的属性或方法