еще один разработчик, и я занимаюсь созданием сайта, мы внедрили нашу собственную модель ООП, о которой мы долго обсуждали, но, похоже, я столкнулся с кирпичной стеной. Пожалуйста, медведь со мнойOOP Inheritance
Всех наших классов расширение объекта, который имеет конструктор, который использует get_called_class()
, чтобы получить класс, а затем get_class_vars() и т.д., чтобы загрузить имена столбцов, а это значит, мы можем иметь save
, delete
, displayExisting
, getAll
и несколько других методов в классе по умолчанию, что устраняет много кода. Это хорошо. Теперь у меня есть класс InboundData
, это имеет 3 класса, перенеся себя, называется Visit
, Enquiry
и BrochureRequest
, у них есть «inbound_data_id», то InboundData имеет перегруженный конструктор ищет что-то вроде этого:
function __construct($id = '')
{
$this->className = get_called_class();
$this->id = (int)$id;
$this->tableName = strtolower($this->className);
$this->setDbFields();
$this->loadData();
$this->contact = new Contact($this->contact_id);
$this->address = new Address($this->address_id);
$this->domain = new Domain($this->domain_id);
$this->park = new Park($this->park_id);
}
Проблема в том, что contact
, address
, domain
и park
защищены, так как останавливает метод Object от их подбора в качестве имен столбцов/классов. Это методология, которую мы приняли на всех не дб членов, таких как:
protected $contact;
protected $address;
protected $domain;
protected $park;
Мы не возникнут проблемы, до написания кода во внешнем интерфейсе, я узнал, что я, очевидно, не может заполнить $formObj->contact->var
и т. Д., Не говоря уже о том, что я не написал никакого кода сохранения для расширенных объектов входящих данных, которые должны будут сохранить все прикрепленные таблицы.
Возможно, гуру ООП сообщит нам, где мы поступили не так, и лучший способ добиться этого. Не стесняйтесь задавать любые вопросы, я знаю, что это должно звучать довольно запутанно.
Вы пытались написать геттер? 'function get ($ field) {return $ this -> $ field; } 'и используя' get («contact») 'для извлечения контакта –
BTW,' get_called_class' является излишним, учитывая поведение магической константы '__CLASS__' с PHP 5 – rdlowrey
@rdlowrey спасибо, будет использовать в будущем Eugen, что что im использует сейчас, но это не помогает сэкономить :(Этот бизнес расширил меня.:/ –