我的课程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类对象,因此是空访问问题。
答案 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 []运算符不行。您需要先创建一个数组。