Loading...
PHP/MySQL | Заполнение свойства родителя в потомке

<?php

class BaseModel
{
// модель для класса BaseClass
}

class Model extends BaseModel
{
// модель для класса Class
}

class BaseClass
{
protected $mObj;

public function __construct($route)
{
parent::__construct($route);
$this->mObj = new BaseModel();
}
}

class Class extends BaseClass
{
public function __construct($route)
{
parent::__construct($route);
$this->mObj = new Model();
}
}

код примерный-схематический, дело в том, что всё работает правильно при заполнении свойства mObj и в родительском классе и в его потомке, все данные из моделей берутся правильно, сначала для базовой потом для дочерней, НО можно ли так использовать одно свойство для заполнения в родителях и в наследниках, разве не должно быть конфликта? Или свойство превращаеться в массив объектов при позднем "ленивом" его заполненнии?
________
посл. ред. 21.08.2019 в 12:22; всего 1 раз(а); by Вероломство
Model при одноименных методах всегда будет заменять методы BaseModel. Но в php 7 надо что бы совпадали типы вроде global private protected? в php 5 не помню
________
посл. ред. 21.08.2019 в 12:39; всего 1 раз(а); by Сибирский
Сибирский (21.08.2019 в 12:38)
Model при одноименных методах всегда будет заменять методы BaseModel. Но в php 7 надо что бы совпадали типы вроде global private protected? в php 5 не помню

а если таких нет, то будут просто объединяться все методы в одном свойстве?

просто мне так и нужно, каждый контроллер наследуется от базового и чтобы в нём были методы его модели и базовой модели

я так понимаю просто нужно чтобы в какой-то из моделей не было одноимённого метода с базовой?
________
посл. ред. 21.08.2019 в 12:43; всего 1 раз(а); by Вероломство
Вероломство, да, будут обьединяться и не только методы но и переменные даже если они будут в трейтах
Сибирский (21.08.2019 в 12:44)
Вероломство, да, будут обьединяться и не только методы но и переменные даже если они будут в трейтах


тогда мне можно упростить наследование и модель не наследовать от базовой, потому что в свойстве mObj уже доступны методы базовой модели, о то я два раза доступ к ним даю - перестраховываюсь, нужно в обычных моделях просто подключение к БД и всё :-)
Сибирский,


<?php

class BaseModel
{
// модель для класса BaseClass
}

class Model extends BaseModel
{
// модель для класса Class
}

class BaseClass
{
protected $mObj;

public function __construct($route)
{
parent::__construct($route);
}
// ДОСТУПНЫ ЛИ ТУТ ТЕПЕРЬ МЕТОДЫ BaseModel
}

class Class extends BaseClass
{
public function __construct($route)
{
parent::__construct($route);
$this->mObj = new Model();
}
}


так будет работать?

или методы базовой модели будут работать только в Class?
________
посл. ред. 21.08.2019 в 12:54; всего 1 раз(а); by Вероломство
Вероломство, тут никак не связаны классы если я ничего не пропустил, но здесь ты бы посмотрел интерфейсы или абстрактные классы, потому что слишком трудно прослеживать зависимости в такой архитектуре, потом сам будешь путаться.
Сибирский (21.08.2019 в 13:01)
Вероломство, тут никак не связаны классы если я ничего не пропустил, но здесь ты бы посмотрел интерфейсы или абстрактные классы, потому что слишком трудно прослеживать зависимости в такой архитектуре, потом сам будешь путаться.

тут заполняется свойство родителя в наследнике, будут ли в родителе работать методы базовой модели (она наследуется моделью, экземпляр которой создаётся в наследнике)
Вероломство, тут важно на основе чего ты создашь экземпляр
$ex = new MyClass();
или
$ex = new BaseClass();
Сибирский (21.08.2019 в 13:18)
Вероломство, тут важно на основе чего ты создашь экземпляр
$ex = new MyClass();
или
$ex = new BaseClass();


пост 6: экземпляр модели создаётся в потомке и заполняет свойство родителя, модель наследует базовую модель (имеет доступ к её методам), будут ли эти методы видны в родителе класса (в базовом классе)

или они видны только после создания?

и будут видны в методах родителя так же, если эти методы используются в потомке после создания экземпляра?
Онлайн: 3
Время:
Gen. 0.1409
(c) Bym.Guru 2010-2025