Хорошо, теперь все ясно.
Вы храните данные в ассоциативном массиве. И вы переопределяете этот массив в подклассе. Конечно, в этом случае значения суперкласса не будут иметь значения.
Вместо этого переместите определение массива в конструктор класса. Тогда вы должны иметь
<?php
class Crm_Entity extends Crm_Abstract
{
protected $_mapper = 'Crm_Mapper_Entity';
protected $_data;
public function __construct()
{
parent::__construct();
$newData = array(
'customerId' => '', //done
'displayName' => '', //done
'active' => '', //done
'billingMethod' => '', //done
'debitorNumber' => null, //done
'bankAccount' => null, //done
'bankAccountTown' => null, //done
'resellerOrganisationId'=> null,
'account' => null, //done
'phonenumbers' => null, //done
'calls' => null,
'tickets' => null,
'comments' => null,
'addresses' => null,
'emailaddresses' => null, //done
'actionevents' => null
);
$this->_data = $newData;
}
}
class Crm_CustomerEntity extends Crm_Entity
{
//foobar not done yet
public function __construct()
{
parent::__construct();
}
}
class Crm_Person extends Crm_CustomerEntity
{
public function __construct()
{
parent::__construct();
$newData = array(
'customerId' => null,
'firstName' => '',
'middleName' => '',
'lastName' => '',
'initials' => '',
'title' => '',
'openingWord' => ''
);
$this->_data = array_merge($this->_data, $newData);
}
}
Конечно, фактический дизайн зависит - если вы хотите, чтобы эти отображения до создавали класс, вы должны вместо этого поместить их в некоторую статическую функцию. Что-то вроде
class Crm_Person extends Crm_CustomerEntity
{
public static function getData()
{
$data = Crm_Entity::getData()
$newData = (...)
return array_merge($data, $newData);
}
}