-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 メソッドで配列に対してキー チェックを実行すると、null エラーが発生します。

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

これらのエラーの原因と解決方法を教えてください。

編集問題は解決しました。

$this->categoryText[] = $categoryText;

に等しくない

$instance->categoryText[] = $categoryText;

インスタンス化されたクラス オブジェクトを参照していないため、null アクセスの問題が発生します。

4

2 に答える 2

0

これを試して:

class CategoryModel {

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

   ....

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

Java のように強制的に変数を初期化しないのは、PHP の悪い機能です。つまり、常にこれらのエラーが発生します。変数は配列ではないため、$var[] 演算子は機能しません。最初に配列を作成する必要があります。

于 2013-06-19T16:33:26.637 に答える
0

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

privateメンバーは、同じクラス内のメソッドにのみ表示されます。それらはクラスの外では見えず、子孫オブジェクトからも見えません。

エラーは、 のインスタンス内で発生していることを明確に示しているQuestionDaoTestため、親内で宣言されたプライベート メンバーは表示CategoryModelされません

protectedメンバーを外界から隠しますが、オブジェクト内で表示され、子孫オブジェクトでも表示されます。

于 2013-06-19T16:27:54.937 に答える