It is possible to use objects as result. A comprehensive example may be seen in the intro.
But using objects is not a simple alternative to using arrays as result. It is also possible to register a custom Class to be returned instead of the default MDB_QueryTool_Result_Row. The new resulting class has to be child of the MDB_QueryTool_Result_Row class.
To change the resulting class the method setReturnClass
is used.
<?php
require_once 'MDB/QueryTool.php';
require_once 'MDB/QueryTool/Result/Object.php';
define('TABLE_CARS', 'cars');
$dsn = 'mysql://user:pass@host/dbname';
/**
* Let's suppose the "cars" table has the following fields:
* (id, model, hp, color, clima, price)
*/
class Car extends MDB_QueryTool
{
public $table = TABLE_CARS;
}
class CarEntity extends MDB_QueryTool_Result_Row
{
}
//instanciate an object of the Car class
$car = new Car($dsn);
$car->useResult('object');
$car->setReturnClass('CarEntity');
?>
This can now be used to implement getter and setter and thus regulate the accessability to the values. In order to block the access to the class variables from outside they have to be declared as protected. Declaring them as private would result in also blocking the parent class, which gets the data, of accessing them. Of course when doing so corresponding methods have to be implemented to access the variables again.
To keep the example short only methods for dealing with model, hp and clima have been implemented.
<?php
require_once 'MDB/QueryTool.php';
require_once 'MDB/QueryTool/Result/Object.php';
define('TABLE_CARS', 'cars');
$dsn = 'mysql://user:pass@host/dbname';
/**
* Let's suppose the "cars" table has the following fields:
* (id, model, hp, color, clima, price)
*/
class Car extends MDB_QueryTool
{
public $table = TABLE_CARS;
}
class CarEntity extends MDB_QueryTool_Result_Row
{
protected $id;
protected $model;
protected $hp;
protected $color;
protected $clima;
protected $price;
public function getModel() {
return $this->model;
}
public function setModel($model) {
$this->model = $model;
}
public function getHp() {
return $this->hp;
}
public function setHp($hp) {
$this->hp = $hp;
}
public function getClima() {
if ($this->clima) {
return true;
} else {
return false;
}
}
public function setClima($clima) {
if ($clima) {
$this->clima = 1;
} else {
$this->clima = 0;
}
}
}
//instantiate an object of the Car class
$car = new Car($dsn);
$car->useResult('object');
$car->setReturnClass('CarEntity');
?>
This example only demonstrates a very basic feature. But it enables for example the implementation of Decorators. Every feature of modern OOP is now possible to implement.