Skip to content
comhon-project edited this page Aug 5, 2017 · 31 revisions

Table of content

  1. How it works ?
  2. Model class
  3. Simple Model
  4. Complex Model
  5. Container Model
  6. ModelManager class
  7. Object class
  8. Extends from Object
  9. Code Example

How it works ?

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.

Model class

Simple Model

list of simple model managed :

  • boolean
  • integer
  • index
  • float
  • string
  • percentage
  • ComhonDateTime

Complex Model

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

Container Model

Model can associate a container to a property name and this container will contain the "real" model.

Properties can have two kind of container :

  • ModelForeign (property is a reference to another object)
  • ModelArray (array)

ModelManager class

Instanciating 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');

Object class

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().

$object = $model->getObjectInstance();

To 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);

Extends from Object

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 Object 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().

$personModel = ModelManager::getInstance()->getInstanceModel('Person');
$person = $personModel->getObjectInstance();
// or
$person = new Person();

Code Example

// 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');

Clone this wiki locally