1

抽象クラスと派生クラスの例を次に示します。クラスAには、クラスBに実装されている抽象メソッド「collectData」が1つあります。メソッド「getData」が呼び出されると、「collectData」が呼び出され、プライベートメンバー変数「$data」に値が設定されます。その後、getDataはこの変数の内容を返します。これを実行すると、戻り値はarray(1、2、3)になると予想されます。しかし、それは空の配列です。なんで?ちなみに私はPHP5.3.10を使用しています。

<?php

abstract class A
{
    private $data;

    public function __construct()
    {
        $this->data = array();  
    }

    abstract protected function collectData();

    public function getData()
    {
        $this->collectData();
        return $this->data;
    }
}

class B extends A
{
    protected function collectData()
    {
        $this->data = array(1, 2, 3);
    }
}

$test = new B();
$data = $test->getData();
print_r($data);
4

3 に答える 3

5

次のようなものであってはなりません。

private $data;

しかし:

protected $data;

プライベート プロパティは、派生後に表示されません。

于 2012-05-11T08:34:48.777 に答える
1

$dataプロパティを作成するpublicor andあなたprotectedが見るでしょう...

プロパティが非公開の場合、print_r表示されません...または呼び出しますvar_dump($data)-これにより、非公開メンバーも出力されます...

于 2012-05-11T08:35:01.707 に答える
0

抽象クラスにセッターとゲッターを配置して、データ プロパティを管理します。

public function setData($data){
   $this->data = $data;
}

public function getData($data){
   return $this->data;
}
于 2012-05-11T09:06:04.813 に答える