PHP类的未知属性

时间:2013-06-19 16:21:41

标签: php

我的课程CategoryModel部分定义为

class CategoryModel {

    private $id, $categoryText;

    public function createWithParams($id, $categoryText) {
        $instance = new self();
        $instance->id = $id;
        $instance->categoryText = array();

        if ($categoryText != null)
            $this->categoryText[] = $categoryText;

        return $instance;

    }

    .... further model code 

}

当我在phpunit测试中调用此函数时,我得到了打印输出

    Exception: Unknown property 'categoryText' for class 'QuestionDaoTest'

以行

为中心
$this->categoryText[] = $categoryText();

我将数组值赋值代码更改为

if ($categoryText != null)
  $this->categoryText = array($categoryText);
else
  $this->categoryText = array();

但是当我在setter方法中对数组执行in_array键检查时,这会给我一个空错误

public function addCategoryText($categoryText) {
  if (!in_array($categoryText, $this->categoryText)) {
    $this->categoryText[] = $categoryText;
    return true;
  }
  return false;
 }

这些错误背后的原因是什么?如何解决?

EDIT 问题解决了。

$this->categoryText[] = $categoryText;

不等于

$instance->categoryText[] = $categoryText;

我没有提到instanciated类对象,因此是空访问问题。

2 个答案:

答案 0 :(得分:0)

RTM:http://php.net/manual/en/language.oop5.visibility.php

private成员仅对同一类中的方法可见。它们在课外不可见,对后代物体不可见。

错误清楚地表明它是在QuestionDaoTest的实例中发生的,因此在父CategoryModel内声明的任何私有成员都将 NOT 可见。

你想要protected,它隐藏了来自外部世界的成员,但在对象中是可见的,在后代对象中也是可见的。

答案 1 :(得分:0)

试试这个:

class CategoryModel {

   private $id = null;
   private $categoryText = null;

   ....

   function __construct()
   {
        $this->categoryText = array();
        // more initialization ....

如果没有 FORCE 来初始化Java中的变量,这是一个很糟糕的特性,即总是会导致这些错误:你的变量不是数组,因此$ var []运算符不行。您需要先创建一个数组。