Вот мой код класса,
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();
}
Вы не можете return
ничего из конструктора, периода. Конструктор может только настроить объект или выбросить исключение, он ничего не может вернуть. Там, где вы пишете new Foo
, результатом будет экземпляр объекта Foo
и ничего больше. Это нельзя переопределить.
$gatewayRow = new Gateway($gatewayId); print_r($gatewayRow); exit;
Это возможно ?