Создайте метод, возвращающий полный класс Object, даже когда я вызываю какую-то другую функцию [duplicate]

0

Вот мой код класса,

class Gateway extends Gateways
{
public function __construct($id = false)
{
    parent::__construct();

    if($id) return $this->getById($id);
}

public function getById($id)
{
    $this->gateway_select->columns($this->cols)->where(array($this->columns['ID'] => $id, $this->columns['IS_ACTIVE'] => 1));
    return $this->_fetch();
}

protected function _fetch()
{
    $this->gateway_select->limit(1);
    //echo $this->sql->getSqlStringForSqlObject($this->gateway_select);
    $result = $this->sql->prepareStatementForSqlObject($this->gateway_select)->execute()->current();
    return $result;
}

и теперь, когда я вызываю этот код в другом файле

$gatewayRow = new Gateway($gatewayId);

print_r($gatewayRow);
exit;

Выходной результат - это объект класса Gateway вместо строки базы данных, полученной из метода getById ($ id), но, как мне известно, возврат должен быть строкой базы данных.

Когда я вызываю метод getById() отдельно, например $gateway->setById($id); он работает, поэтому его что-то с __construct()

parent :: __ код конструкции

public function __construct()
{
    $this->db = TechMediaStudios::dbInstance();
    $this->sql = TechMediaStudios::sqlInstance();
    $this->gateway_select = $this->sql->select()->from($this->table);
    $this->_getColumns();
}
  • 0
    что делает ваш родительский конструктор? если он возвращает что-то, он не перейдет к следующему, как у вас в подклассе ...
  • 0
    родительская конструкция просто устанавливает некоторые свойства, вот и все, она возвращает void, смотрите обновленный вопрос.
Теги:
oop

1 ответ

1

Вы не можете return ничего из конструктора, периода. Конструктор может только настроить объект или выбросить исключение, он ничего не может вернуть. Там, где вы пишете new Foo, результатом будет экземпляр объекта Foo и ничего больше. Это нельзя переопределить.

  • 0
    И это здорово по уважительной причине. В противном случае мы бы закончили лживыми API, которые дают вам Animals, когда вы на самом деле хотели иметь Cars.
  • 0
    Хорошо, я получил это, но я хочу добиться результатов таким образом, $gatewayRow = new Gateway($gatewayId); print_r($gatewayRow); exit; Это возможно ?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню