-
Notifications
You must be signed in to change notification settings - Fork 0
Getting started
Comhon! has two main concepts to understand : Object and Model.
- An Object contain values and a model
- Values is a map of values [a_property_name => a_value]
- A Model contain properties
- A property has a name and a type
- A type can be (string, boolean, another model ...)
In other words map of values replace class attributes and model properties replace attributes types.
list of simple model managed :
- boolean
- integer
- index
- float
- string
- percentage
- ComhonDateTime
A complex model is described by a manifest (please take a look at Manifest page). It contain a map of properties and each property has it own model
ModelArray is a specific model that you will use when you will instanciate an ObjectArray. ModelArray is actually a container that contain it own Model (could be simple model or complex model).
You have to specify the name of each array element. For example in a model Person we should have a property children and each element should have the name child.
$modelArray = new ModelArray($model, 'element_name'); // $model is an instanciated simple model or complex modelInstanciating models has a cost (due to manifest loading) so we need to instanciate them only one time.
The singleton ModelManager manage all models instances so we don't have to know if model is already instanciated or not.
To get an instance of a model you just have to call getInstanceModel() :
$model = ModelManager::getInstance()->getInstanceModel('a_model_name');First, we have to describe how different object classes are organized
ComhonObject (abstract)
__________|__________
| |
ObjectUnique (abstract) ObjectArray (final)
__________|__________
| |
Object (final) ExtendableObject (abstract)
Like we said before, an Object contain a Model so when you instanciate an Object you have to specify an instance of Model or a Model name.
$model = ModelManager::getInstance()->getInstanceModel('a_model_name');
$object = new Object($model);
// or
$object = new Object('a_model_name');you can also use model and call function getObjectInstance().
$model = ModelManager::getInstance()->getInstanceModel('a_model_name');
$object = $model->getObjectInstance();
// return an instance of FinalObject if no associated class
// return an instance of ExtendableObject otherwiseTo access value you have to call getter
$object->getValue('property_name');To set a value you have to call setter
$object->setValue('property_name', a_value);in Comhon! framework, arrays are not simple php arrays. Arrays are objects that contain a ModelArray. An ObjectArray is like a typed array and implements Iterator.
You have four ways to instanciate an ObjectArray yourself :
// 1. by specifying a ModelArray
$model = ModelManager::getInstance()->getInstanceModel('a_model_name');
$modelArray = new ModelArray($model, 'element_name');
$objectArray = new ObjectArray($modelArray);
// 2. by specifying a Model (the ModelArray is instanciated automaticaly)
$model = ModelManager::getInstance()->getInstanceModel('a_model_name');
$objectArray = new ObjectArray($model);
// 3. by specifying a Model name (the ModelArray is instanciated automaticaly)
$objectArray = new ObjectArray('a_model_name');
// 4. by using ModelArray
$objectArray = $modelArray->getObjectInstance(); // $modelArray is an instanciated ModelArrayTo access value you have to call getter
$object->getValue('a_key_or_index');To set a value you have to call setter
$object->setValue('a_key_or_index', a_value);
$object->pushValue('a_key_or_index', a_value);
$object->unshiftValue('a_key_or_index', a_value);if you want to associate a class to your object you can create one and define it in your manifest (see Manifest page). Your class must extends from ExtendableObject class
use Comhon\Object\ExtendableObject;
class Person Extends ExtendableObject {
public function getName() {
return $this->getValue('name');
}
public function setAge($age) {
$this->setValue('age', $age);
}
}Now to get an instance of Person you can use model and call function getObjectInstance().
// simply
$person = new Person();
// or
$personModel = ModelManager::getInstance()->getInstanceModel('Person');
$person = $personModel->getObjectInstance(); // return an instance of Person if you have defined it in manifest// first way to instanciate a Comhon object
$personModel = ModelManager::getInstance()->getInstanceModel('person');
$person = $personModel->getObjectInstance();
// second way to instanciate a Comhon object
$person = new Object('person');
// third way to instanciate a comhon object only if you have defined a class
$person = new Person();
// set Comhon object values
$person->setValue('age', 21);
$person->setValue('foo', 'bar'); // will not work because person doesn't have property 'foo'
// get Comhon object value
$age = $person->getValue('age');