-1

我有一个类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();

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

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

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

编辑问题解决了。

$this->categoryText[] = $categoryText;

不等于

$instance->categoryText[] = $categoryText;

我不是指实例化的类对象,因此是空访问问题。

4

2 回答 2

0

尝试这个:

class CategoryModel {

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

   ....

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

php 的一个不好的特性是不强制初始化像 Java ie 中的变量,这总是会导致这些错误:您的变量不是数组,因此 $var[] 运算符将不起作用。您需要先创建一个数组。

于 2013-06-19T16:33:26.637 回答
0

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

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

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

You want protected,它将成员对外界隐藏,但在对象中可见并且在后代对象中也可见。

于 2013-06-19T16:27:54.937 回答