2
25

Object

La classe Object implémente les messages de base du modèle So-o. Toutes les autres classes héritent de la classe Object.

Tout le code de la classe Object de So-o est dans le fichier Object.php.

  1. namespace Object;
  2.  
  3. use \InvalidArgumentException as InvalidArgumentException;

Place le code de la classe Object dans son espace de nommage.

  1. require_once 'OL.php';

Charge le code de l'Object Layer.

  1. define(__NAMESPACE__ . '\InvalidClassProperty', '%s::%s Invalid class property');
  2. define(__NAMESPACE__ . '\InvalidClassMessage', '%s::%s Invalid class message');
  3. define(__NAMESPACE__ . '\InvalidInstanceProperty', '%s::%s Invalid instance property');
  4. define(__NAMESPACE__ . '\InvalidInstanceMessage', '%s::%s Invalid instance message');
  5.  
  6. define(__NAMESPACE__ . '\NotImplemented', '%s::%s Not implemented');
  7. define(__NAMESPACE__ . '\SubclassResponsibility', '%s::%s Subclass responsibility');

Définit les textes des messages d'erreurs retournés par la classe Object.

  1. defclass('Object',
  2.         // superclass
  3.         null,
  4.         // revision
  5.         1,
  6.         // class properties
  7.         null,
  8.         // instance properties
  9.         null,
  10.         // class messages
  11.         array('get', 'set', 'make', 'new', 'initialize', 'free', 'class', 'name', 'superclass', 'classMessages', 'instanceMessages', 'classProperties', 'instanceProperties', 'classMethodFor', 'instanceMethodFor', 'perform', 'read', 'write', 'error', 'doesNotContain', 'doesNotRecognize', 'notImplemented', 'subclassResponsibility', 'revision', 'addInstanceMessage', 'removeInstanceMessage', 'addClassMessage', 'removeClassMessage', 'addInstanceProperty', 'removeInstanceProperty', 'addClassProperty', 'removeClassProperty', 'check'),
  12.         // instance messages
  13.         array('get', 'set', 'init', 'free', 'class', 'superclass', 'perform', 'delegate', 'setDelegate', 'respondsTo', 'methodFor', 'isKindOf', 'copy', 'read', 'write', 'assume', 'toString', 'print', 'error', 'doesNotContain', 'doesNotRecognize', 'notImplemented', 'subclassResponsibility', 'messages', 'properties')
  14.         );

La classe Object est la seule classe qui n'hérite d'aucune superclasse. Elle n'a pas de propriétés de classe ou d'instance. Elle implémente tous les messages de base du modèle So-o.

MÉTHODES DE CLASSE

free
SYNOPSIS

free($self)

DESCRIPTION

free est automatiquement envoyé par l'Object Layer à une classe qui n'est plus référencée. La méthode free définie par la classe Object ne fait rien.

IMPORTANT : Si vous décidez de supprimer la méthode __destruct de la classe Definition de l'Object Layer, le conteneur d'une classe, free ne sera pas automatiquement envoyé.

CODE
  1. function c_free($self) {
  2. }

free ne fait rien.

initialize
SYNOPSIS

initialize($self)

DESCRIPTION

initialize est automatiquement envoyé à une nouvelle classe par defclass. La méthode initialize définie par la classe Object ne fait rien.

initialize est généralement redéfini par une classe qui doit initialiser ses propriétés de classe.

CODE
  1. function c_initialize ($self) {
  2.     return $self;
  3. }

initialize ne fait rien et retourne $self.

class
name
revision
superclass
SYNOPSIS

class($self)

name($self)

revision($self)

superclass($self)

DESCRIPTION

class retourne la classe de la classe $self, i.e. $self.

name retourne le nom de la classe $self.

revision retourne le numéro de révision de la classe $self.

superclass retourne la superclasse de la classe $self, null si $self est $Object, la classe Object.

CODE
  1. function c_class($self) {
  2.     return $self;
  3. }
  4.  
  5. function c_name($self) {
  6.     return \OL\class_name($self);
  7. }
  8.  
  9. function c_revision($self) {
  10.     return \OL\class_revision($self);
  11. }
  12.  
  13. function c_superclass($self) {
  14.     return \OL\class_superclass($self);
  15. }

class retourne $self. name, revision et superclass retournent le résultat des fonctions class_name, class_revision et class_superclass de l'Object Layer.

get
set
SYNOPSIS

get($self, $attribute)

set($self, $attribute, $value)

DESCRIPTION

get retourne la valeur de la propriété $attribute de $self.

set met la valeur de la propriété $attribute de $self à $value.

IMPORTANT : get retourne une valeur, pas une référence d'une valeur. Pour modifier le contenu d'un attribut dont la valeur est un tableau, récupérez la valeur avec get, modifiez-la puis changez la valeur de la propriété avec set.

CODE
  1. function c_get($self, $attribute) {
  2.     return \OL\class_get($self, $attribute);
  3. }
  4.  
  5. function c_set($self, $attribute, $value) {
  6.     return \OL\class_set($self, $attribute, $value);
  7. }

get et set retournent le résultat des fonctions class_get et class_set de l'Object Layer.

make
new
SYNOPSIS

make($self)

new($self[, $arg ...])

DESCRIPTION

make retourne une nouvelle instance de $self.

new crée une instance de $self, lui envoie le message init avec les paramètres du message suivant $self et retourne la nouvelle instance initialisée.

IMPORTANT : Créez toujours une instance avec new.

CODE
  1. function c_make($self) {
  2.     return \OL\class_make($self);
  3. }
  4.  
  5. function c_new($self) {
  6.     return \OL\object_send_message(\OL\class_send_message($self, 'make'), 'init', array_slice(func_get_args(), 1));
  7. }

make retourne le résultat de la fonction class_make de l'Object Layer.

new crée une instance en envoyant make à $self, lui envoie init avec les paramètres du message suivant $self et retourne la nouvelle instance.

perform
SYNOPSIS

perform($self, $message, $args=false)

DESCRIPTION

perform retourne le résultat de l'envoi du message $message à $self avec $args en argument. $args est un tableau. Par défaut, le message n'a pas d'argument.

CODE
  1. function c_perform($self, $message, $args=false) {
  2.     return \OL\class_send_message($self, $message, $args);
  3. }

perform retourne le résultat de l'envoi de $message et de $args à $self.

read
write
SYNOPSIS

read($self, $data)

write($self)

DESCRIPTION

write retourne la sérialisation des attributs de $self.

read initialise les attributs de $self avec $data. $data est un tableau de valeurs sérialisé.

CODE
  1. function c_read($self, $data) {
  2.     $properties=\OL\class_send_message($self, 'classProperties', array(true));
  3.  
  4.     if (!$properties) {
  5.         return $self;
  6.     }
  7.  
  8.     $data=unserialize($data);
  9.     if (!is_array($data)) {
  10.         throw new InvalidArgumentException();
  11.     }
  12.  
  13.     $attributes=array();
  14.     foreach ($properties as $prop) {
  15.         if (isset($data[$prop])) {
  16.             $attributes[$prop]=$data[$prop];
  17.         }
  18.     }
  19.  
  20.     return \OL\class_set_attributes($self, $attributes);
  21. }
  22.  
  23. function c_write($self) {
  24.     return serialize(\OL\class_attributes($self));
  25. }

write appelle la fonction serialize avec en argument le tableau des attributs de $self et retourne le résultat. read obtient la liste des propriétés de $self, appelle la fonction unserialize avec $data en argument, vérifie que le résultat est un tableau, puis initialise chaque attribut de $self avec la valeur correspondante extraite de ce tableau.

classMessages
instanceMessages
classMethodFor
instanceMethodFor
addClassMessage
removeClassMessage
addInstanceMessage
removeInstanceMessage
SYNOPSIS

classMessages($self, $inherit=true)

instanceMessages($self, $inherit=true)

classMethodFor($self, $message)

instanceMethodFor($self, $message)

addClassMessage($self, $message)

removeClassMessage($self, $message)

addInstanceMessage($self, $message)

removeInstanceMessage($self, $message)

DESCRIPTION

classMessages retourne les messages de classe de $self dans un tableau. Si $inherit vaut true, classMessages retourne aussi les messages de classe hérités de toutes les superclasses de $self.

instanceMessages retourne les messages d'instance de $self dans un tableau. Si $inherit vaut true, instanceMessages retourne aussi les messages d'instance hérités de toutes les superclasses de $self.

classMethodFor retourne la fonction qui implémente le message de classe $message de $self.

instanceMethodFor retourne la fonction qui implémente le message d'instance $message de $self.

addClassMessage ajoute le message de classe $message à $self.

removeClassMessage retire le message de classe $message à $self.

addInstanceMessage ajoute le message d'instance $message à $self.

removeInstanceMessage retire le message d'instance $message à $self.

CODE
  1. function c_classMessages($self, $inherit=true) {
  2.     $messages=\OL\class_class_messages($self);
  3.  
  4.     if ($messages) {
  5.         $messages=array_keys($messages);
  6.     }
  7.  
  8.     if ($inherit) {
  9.         $superclass=\OL\class_superclass($self);
  10.  
  11.         if ($superclass) {
  12.             $inherited_messages=\OL\class_send_message($superclass, 'classMessages', array(true));
  13.  
  14.             if ($inherited_messages) {
  15.                 $messages=$messages ? array_unique(array_merge($messages, $inherited_messages)) : $inherited_messages;
  16.             }
  17.         }
  18.     }
  19.  
  20.     return $messages;
  21. }
  22.  
  23. function c_instanceMessages($self, $inherit=true) {
  24.     $messages=\OL\class_instance_messages($self);
  25.  
  26.     if ($messages) {
  27.         $messages=array_keys($messages);
  28.     }
  29.  
  30.     if ($inherit) {
  31.         $superclass=\OL\class_superclass($self);
  32.  
  33.         if ($superclass) {
  34.             $inherited_messages=\OL\class_send_message($superclass, 'instanceMessages', array(true));
  35.  
  36.             if ($inherited_messages) {
  37.                 $messages=$messages ? array_unique(array_merge($messages, $inherited_messages)) : $inherited_messages;
  38.             }
  39.         }
  40.     }
  41.  
  42.     return $messages;
  43. }
  44.  
  45. function c_classMethodFor($self, $message) {
  46.     return \OL\class_find_class_method($self, $message);
  47. }
  48.  
  49. function c_instanceMethodFor($self, $message) {
  50.     return \OL\class_find_instance_method($self, $message);
  51. }
  52.  
  53. function c_addClassMessage($self, $message) {
  54.     return \OL\class_add_class_message($self, $message);
  55. }
  56.  
  57. function c_removeClassMessage($self, $message) {
  58.     return \OL\class_remove_class_message($self, $message);
  59. }

classMessages met $messages à la liste des messages de classe de $self, ajoute les messages de classe des superclasses de $self, en supprimant les doublons, si $inherit vaut true puis retourne $messages. instanceMessages met $messages à la liste des messages d'instance de $self, ajoute les messages d'instance des superclasses de $self, en supprimant les doublons, si $inherit vaut true puis retourne $messages. classMethodFor, instanceMethodFor, addClassMessage, removeClassMessage, addInstanceMessage et removeInstanceMessage retournent le résultat des fonctions class_find_class_method, class_find_instance_method, class_add_class_message, class_remove_class_message, class_add_instance_message et class_remove_instance_message de l'Object Layer.

classProperties
instanceProperties
addClassProperty
removeClassProperty
addInstanceProperty
removeInstanceProperty
SYNOPSIS

classProperties($self, $inherit=true)

instanceProperties($self, $inherit=true)

addClassProperty($self, $property)

removeClassProperty($self, $property)

addInstanceProperty($self, $property)

removeInstanceProperty($self, $property)

DESCRIPTION

classProperties retourne les propriétés de classe de $self dans un tableau. Si $inherit vaut true, classProperties retourne aussi les propriétés de classe héritées de toutes les superclasses de $self.

instanceProperties retourne les propriétés d'instance de $self dans un tableau. Si $inherit vaut true, instanceProperties retourne aussi les propriétés d'instance héritées de toutes les superclasses de $self.

addClassProperty ajoute la propriété de classe $property à $self.

removeClassProperty retire la propriété de classe $property à $self.

addInstanceProperty ajoute la propriété d'instance $property à $self.

removeInstanceProperty retire la propriété d'instance $property à $self.

CODE
  1. function c_addInstanceMessage($self, $message) {
  2.     return \OL\class_add_instance_message($self, $message);
  3. }
  4.  
  5. function c_removeInstanceMessage($self, $message) {
  6.     return \OL\class_remove_instance_message($self, $message);
  7. }
  8.  
  9. function c_classProperties($self, $inherit=true) {
  10.     $properties=\OL\class_class_properties($self);
  11.  
  12.     if ($properties) {
  13.         $properties=array_keys($properties);
  14.     }
  15.  
  16.     if ($inherit) {
  17.         $superclass=\OL\class_superclass($self);
  18.  
  19.         if ($superclass) {
  20.             $inherited_properties=\OL\class_send_message($superclass, 'classProperties', array(true));
  21.  
  22.             if ($inherited_properties) {
  23.                 $properties=$properties ? array_unique(array_merge($properties, $inherited_properties)) : $inherited_properties;
  24.             }
  25.         }
  26.     }
  27.  
  28.     return $properties;
  29. }
  30.  
  31. function c_instanceProperties($self, $inherit=true) {
  32.     $properties=\OL\class_instance_properties($self);
  33.  
  34.     if ($properties) {
  35.         $properties=array_keys($properties);
  36.     }
  37.  
  38.     if ($inherit) {
  39.         $superclass=\OL\class_superclass($self);
  40.  
  41.         if ($superclass) {
  42.             $inherited_properties=\OL\class_send_message($superclass, 'instanceProperties', array(true));
  43.  
  44.             if ($inherited_properties) {
  45.                 $properties=$properties ? array_unique(array_merge($properties, $inherited_properties)) : $inherited_properties;
  46.             }
  47.         }
  48.     }
  49.  
  50.     return $properties;
  51. }

classProperties met $properties à la liste des propriétés de classe de $self, ajoute les propriétés de classe des superclasses de $self, en supprimant les doublons, si $inherit vaut true puis retourne $properties. instanceProperties met $properties à la liste des propriétés d'instance de $self, ajoute les propriétés d'instance des superclasses de $self, en supprimant les doublons, si $inherit vaut true puis retourne $properties. addClassProperty, removeClassProperty, addInstanceProperty et removeInstanceProperty retournent le résultat des fonctions class_add_class_property, class_remove_class_property, class_add_instance_property et class_remove_instance_property de l'Object Layer.

error
doesNotContain
doesNotRecognize
notImplemented
subclassResponsibility
SYNOPSIS

error($self, $err[, $arg ...])

doesNotContain($self, $property)

doesNotRecognize($self, $message)

notImplemented($self, $message)

subclassResponsibility($self, $message)

DESCRIPTION

error déclenche une erreur PHP de niveau E_USER_ERROR dont le texte est formaté avec la fonction sprintf avec en argument $err et les paramètres du message suivant $err.

doesNotContain envoie le message error à $self avec en argument la constante InvalidClassProperty, le nom de la classe $self et $property.

doesNotRecognize envoie le message error à $self avec en argument la constante InvalidClassMessage, le nom de la classe $self et $message.

notImplemented envoie le message error à $self avec en argument la constante NotImplemented, le nom de la classe $self et $message.

subclassResponsibility envoie le message error à $self avec en argument la constante SubclassResponsibility, le nom de la classe $self et $message.

doesNotContain et doesNotRecognize sont envoyés par l'Object Layer. notImplemented est généralement envoyé par une méthode qui n'est pas encore codée alors que subclassResponsibility est envoyé par une méthode qui doit être implémentée par une sous-classe d'une classe abstraite.

CODE
  1. function c_addClassProperty($self, $property) {
  2.     return \OL\class_add_class_property($self, $property);
  3. }
  4.  
  5. function c_removeClassProperty($self, $property) {
  6.     return \OL\class_remove_class_property($self, $property);
  7. }
  8.  
  9. function c_addInstanceProperty($self, $property) {
  10.     return \OL\class_add_instance_property($self, $property);
  11. }
  12.  
  13. function c_removeInstanceProperty($self, $property) {
  14.     return \OL\class_remove_instance_property($self, $property);
  15. }
  16.  
  17. function c_error ($self, $err) {
  18.     $errmsg=call_user_func_array('sprintf', array_merge(array($err), array_slice(func_get_args(), 2)));
  19.  
  20.     return trigger_error($errmsg, E_USER_ERROR);
  21. }

error formate le message d'erreur $errmsg en passant $err et le reste des arguments suivant $err à sprintf puis appelle trigger_error avec en argument $errmsg et le niveau d'erreur E_USER_ERROR. doesNotContain, doesNotRecognize, notImplemented et subclassResponsibility envoient le message error à $self avec en argument la constante du message d'erreur correspondant et ses paramètres.

check
SYNOPSIS

check($self)

DESCRIPTION

check vérifie l'intégrité de la classe $self.

check retourne un tableau de 4 tableaux. Le premier liste les messages de classe qui n'ont pas de fonctions correspondantes dans l'espace de nommage de la classe $self. Le second liste les messages de classe qui ne sont pas mentionnés dans la définition de la classe $self alors qu'une fonction correspondante a été trouvée dans son espace de nommage. Le troisième liste les messages d'instance qui n'ont pas de fonctions correspondantes dans l'espace de nommage de la classe $self. Le quatrième liste les messages d'instance qui ne sont pas mentionnés dans la définition de la classe $self alors qu'une fonction correspondante a été trouvée dans son espace de nommage.

CODE
  1. function c_doesNotContain($self, $property) {
  2.     return \OL\class_send_message($self, 'error', array(InvalidClassProperty, \OL\class_name($self), $property));
  3. }

check retourne le résultat de la fonction class_check de l'Object Layer.

MÉTHODES D'INSTANCE

class
superclass
messages
properties
SYNOPSIS

class($self)

superclass($self)

messages($self, $inherit=true)

properties($self, $inherit=true)

DESCRIPTION

class retourne la classe de $self.

superclass retourne la superclasse de la classe de $self, i.e. null si $self est une instance de la classe Object.

messages retourne les messages reconnus par $self dans un tableau. Si $inherit vaut true, messages retourne aussi les messages hérités de toutes les superclasses de $self. $inherit vaut true par défaut.

properties retourne les propriétés de $self dans un tableau. Si $inherit vaut true, properties retourne aussi les propriétés héritées de toutes les superclasses de $self. $inherit vaut true par défaut.

CODE
  1. function i_class($self) {
  2.     return \OL\object_class($self);
  3. }
  4.  
  5. function i_superclass($self) {
  6.     return \OL\class_superclass(\OL\object_class($self));
  7. }
  8.  
  9. function i_messages($self, $inherit=true) {
  10.     return \OL\class_send_message(\OL\object_class($self), 'instanceMessages', array($inherit));
  11. }
  12.  
  13. function i_properties($self, $inherit=true) {
  14.     return \OL\class_send_message(\OL\object_class($self), 'instanceProperties', array($inherit));
  15. }

class retourne le résultat de la fonction object_class de l'Object Layer. superclass retourne le résultat de la fonction class_superclass avec en argument la classe de $self. messages envoie le message instanceMessages à la classe de $self avec $inherit en argument. properties envoie le message instanceProperties à la classe de $self avec $inherit en argument.

isKindOf
methodFor
respondsTo
assume
SYNOPSIS

isKindOf($self, $class)

methodFor($self, $message)

respondsTo($self, $message)

assume($self, $class)

DESCRIPTION

isKindOf retourne true si $self est une instance de la classe ou d'une sous-classe de $class ou false dans le cas contraire.

methodFor retourne la fonction qui implémente le message $message pour $self ou false si $self ne répond pas à $message.

respondsTo retourne true si $self a une méthode pour le message $message, false dans le cas contraire.

assume change la classe de $self à $class. Les valeurs des propriétés de la classe précédente de $self qui ne font pas partie de la classe $class sont conservées mais elles ne sont pas accessibles.

CODE
  1. function i_isKindOf($self, $class) {
  2.     return \OL\class_is_kind_of(\OL\object_class($self), $class);
  3. }
  4.  
  5. function i_methodFor($self, $message) {
  6.     return \OL\class_find_instance_method(\OL\object_class($self), $message);
  7. }
  8.  
  9. function i_respondsTo($self, $message) {
  10.     return \OL\class_find_instance_method(\OL\object_class($self), $message) ? true : false;
  11. }
  12.  
  13. function i_assume($self, $class) {
  14.     return \OL\object_assume($self, $class);
  15. }

isKindOf retourne le résultat de la fonction class_is_kind_of de l'Object Layer avec en argument la classe de $self et $class. methodFor retourne le résultat de la fonction class_find_instance_method avec en argument la classe de $self et $message. respondsTo retourne true si le résultat de la fonction class_find_instance_method avec en argument la classe de $self et $message n'est pas false, true dans le cas contraire. assume appelle la fonction object_assume avec $class en argument.

free
SYNOPSIS

free($self)

DESCRIPTION

free est automatiquement envoyé par l'Object Layer à une instance qui n'est plus référencée. La méthode free définie par la classe Object ne fait rien.

IMPORTANT : Si vous décidez de supprimer la méthode __destruct de la classe Instance de l'Object Layer, le conteneur d'une instance, free ne sera pas automatiquement envoyé.

CODE
  1. function i_free($self) {
  2. }

free ne fait rien.

init
SYNOPSIS

init($self[, $arg ...])

DESCRIPTION

init est automatiquement envoyé à une nouvelle instance par new. La méthode init définie par la classe Object ne fait rien.

init est généralement redéfini par une classe qui doit initialiser ses propriétés d'instance.

CODE
  1. function i_init($self) {
  2.     return $self;
  3. }

init ne fait rien et retourne $self.

copy
SYNOPSIS

copy($self)

DESCRIPTION

copy retourne une copie de $self.

CODE
  1. function i_copy ($self) {
  2.     return \OL\object_copy($self);
  3. }

copy retourne le résultat de la fonction object_copy de l'Object Layer.

toString
print
SYNOPSIS

toString($self)

print($self, $eol=false)

DESCRIPTION

toString retourne une représentation lisible de $self. La méthode toString de la classe Object retourne une chaîne de caractères vide.

print écrit la représentation lisible de $self dans le tampon de sortie standard. Si $eol vaut true, print ajoute un renvoi à la ligne. $eol vaut false par défaut. print retourne $self.

CODE
  1. function i_toString($self) {
  2.     return '';
  3. }
  4.  
  5. function i_print($self, $eol=false) {
  6.     echo \OL\object_send_message($self, 'toString');
  7.  
  8.     if ($eol) {
  9.         echo PHP_EOL;
  10.     }
  11.  
  12.     return $self;
  13. }

toString retourne une chaîne de caractères vide. print écrit le résultat de l'envoi du message toString à $self dans le tampon de sortie standard, ajoute la valeur de la constante PHP_EOL si $eol vaut true et retourne $self.

get
set
SYNOPSIS

get($self, $attribute)

set($self, $attribute, $value)

DESCRIPTION

get retourne la valeur de la propriété $attribute de $self.

set met la valeur de la propriété $attribute de $self à $value.

Si $attribute n'est pas une propriété de $self, le message doesNotContain est envoyé à $self avec $attribute en argument.

IMPORTANT : get retourne une valeur, pas une référence d'une valeur. Pour modifier le contenu d'un attribut dont la valeur est un tableau, récupérez la valeur avec get, modifiez-la puis changez la valeur de la propriété avec set.

CODE
  1. function i_get($self, $property) {
  2.     return \OL\object_get($self, $property);
  3. }
  4.  
  5. function i_set($self, $property, $value) {
  6.     return \OL\object_set($self, $property, $value);
  7. }

get et set retournent le résultat des fonctions instance_get et instance_set de l'Object Layer.

get retourne le résultat de la fonction object_get de l'Object Layer avec en argument $attribute.

set retourne le résultat de la fonction object_set de l'Object Layer avec en argument $attribute et $value.

perform
SYNOPSIS

perform($self, $message, $args=false)

DESCRIPTION

perform retourne le résultat de l'envoi du message $message à $self avec $args en argument. $args est un tableau. Par défaut, le message n'a pas d'argument.

CODE
  1. function i_perform($self, $message, $args=false) {
  2.     return \OL\object_send_message($self, $message, $args);
  3. }

perform retourne le résultat de l'envoi de $message et de $args à $self.

read
write
SYNOPSIS

read($self, $data)

write($self)

DESCRIPTION

write retourne la sérialisation des attributs de $self.

read initialise les attributs de $self avec $data. $data est un tableau de valeurs sérialisé.

CODE
  1. function i_read($self, $data) {
  2.     $properties=\OL\class_send_message(\OL\object_class($self), 'instanceProperties', array(true));
  3.  
  4.     if (!$properties) {
  5.         return $self;
  6.     }
  7.  
  8.     $data=unserialize($data);
  9.     if (!is_array($data)) {
  10.         throw new InvalidArgumentException();
  11.     }
  12.  
  13.     $attributes=array();
  14.     foreach ($properties as $prop) {
  15.         if (isset($data[$prop])) {
  16.             $attributes[$prop]=$data[$prop];
  17.         }
  18.     }
  19.  
  20.     return \OL\object_set_attributes($self, $attributes);
  21. }
  22.  
  23. function i_write($self) {
  24.     return serialize(\OL\object_attributes($self));
  25. }

write appelle la fonction serialize avec en argument le tableau des attributs de $self et retourne le résultat. read obtient la liste des propriétés de $self, appelle la fonction unserialize avec $data en argument, vérifie que le résultat est un tableau, puis initialise chaque attribut de $self avec la valeur correspondante extraite de ce tableau.

delegate
setDelegate
SYNOPSIS

delegate($self, $msg=false[, $arg ...])

setDelegate($self, $delegate)

DESCRIPTION

delegate retourne le résultat de l'envoi du message $msg et des arguments $arg suivant $msg au délégué de $self. Si $self n'a pas de délégué ou si le délégué de $self ne répond pas au message $msg, delegate retourne false. Si $msg vaut false, delegate retourne le délégué de $self.

setDelegate initialise la propriété delegate de $self avec $delegate.

NOTE : Envoyer delegate ou setDelegate à une instance qui n'a pas la propriété delegate envoie le message doesNotContain à l'instance.

CODE
  1. function i_delegate($self, $msg=false) {
  2.     $delegate=\OL\object_get($self, 'delegate');
  3.  
  4.     if (!$msg) {
  5.         return $delegate;
  6.     }
  7.  
  8.     if (!$delegate) {
  9.         return false;
  10.     }
  11.  
  12.     if (!\OL\object_send_message($delegate, 'respondsTo', array($msg))) {
  13.         return false;
  14.     }
  15.  
  16.     return \OL\object_send_message($delegate, $msg, array_slice(func_get_args(), 2));
  17. }
  18.  
  19. function i_setDelegate($self, $delegate) {
  20.     if (!(is_null($delegate) or is_object($delegate))) {
  21.         throw new InvalidArgumentException();
  22.     }
  23.  
  24.     return \OL\object_set($self, 'delegate', $delegate);
  25. }

delegate met $delegate à la valeur de la propriété delegate de $self, retourne $delegate si $msg vaut false, retourne false si $delegate vaut null ou si $delegate ne répond pas à $msg, retourne le résultat de l'envoi de $msg avec les arguments de delegate suivants $msg à $delegate. setDelegate vérifie que $delegate est null ou un objet puis met la propriété delegate de $self à $delegate.

error
doesNotContain
doesNotRecognize
notImplemented
subclassResponsibility
SYNOPSIS

error($self, $err[, $arg ...])

doesNotContain($self, $property)

doesNotRecognize($self, $message)

notImplemented($self, $message)

subclassResponsibility($self, $message)

DESCRIPTION

error déclenche une erreur PHP de niveau E_USER_ERROR dont le texte est formaté avec la fonction sprintf avec en argument $err et les paramètres du message suivant $err.

doesNotContain envoie le message error à $self avec en argument la constante InvalidClassProperty, le nom de la classe de $self et $property.

doesNotRecognize envoie le message error à $self avec en argument la constante InvalidClassMessage, le nom de la classe de $self et $message.

notImplemented envoie le message error à $self avec en argument la constante NotImplemented, le nom de la classe de $self et $message.

subclassResponsibility envoie le message error à $self avec en argument la constante SubclassResponsibility, le nom de la classe de $self et $message.

doesNotContain et doesNotRecognize sont envoyés par l'Object Layer. notImplemented est généralement envoyé par une méthode qui n'est pas encore codée alors que subclassResponsibility est envoyé par une méthode qui doit être implémentée par une sous-classe d'une classe abstraite.

CODE
  1. function i_error ($self, $err) {
  2.     $errmsg=call_user_func_array('sprintf', array_merge(array($err), array_slice(func_get_args(), 2)));
  3.  
  4.     return trigger_error($errmsg, E_USER_ERROR);
  5. }
  6.  
  7. function i_doesNotContain($self, $property) {
  8.     return \OL\object_send_message($self, 'error', array(InvalidInstanceProperty, \OL\class_name(\OL\object_class($self)), $property));
  9. }
  10.  
  11. function i_doesNotRecognize($self, $message) {
  12.     return \OL\object_send_message($self, 'error', array(InvalidInstanceMessage, \OL\class_name(\OL\object_class($self)), $message));
  13. }
  14.  
  15. function i_notImplemented($self, $message) {
  16.     return \OL\object_send_message($self, 'error', array(NotImplemented, \OL\class_name(\OL\object_class($self)), $message));
  17. }
  18.  
  19. function i_subclassResponsibility($self, $message) {
  20.     return \OL\object_send_message($self, 'error', array(SubclassResponsibility, \OL\class_name(\OL\object_class($self)), $message));
  21. }

error formate le message d'erreur $errmsg en passant $err et le reste des arguments suivant $err à sprintf puis appelle trigger_error avec en argument $errmsg et le niveau d'erreur E_USER_ERROR. doesNotContain, doesNotRecognize, notImplemented et subclassResponsibility envoient le message error à $self avec en argument la constante du message d'erreur correspondant et ses paramètres.

VOIR AUSSI

Interface, Object Layer

Commentaires

Votre commentaire :
[p] [b] [i] [u] [s] [quote] [pre] [br] [code] [url] [email] strip aide 2000

Entrez un maximum de 2000 caractères.
Améliorez la présentation de votre texte avec les balises de formatage suivantes :
[p]paragraphe[/p], [b]gras[/b], [i]italique[/i], [u]souligné[/u], [s]barré[/s], [quote]citation[/quote], [pre]tel quel[/pre], [br]à la ligne,
[url]http://www.izend.org[/url], [url=http://www.izend.org]site[/url], [email]izend@izend.org[/email], [email=izend@izend.org]izend[/email],
[code]commande[/code], [code=langage]code source en c, java, php, html, javascript, xml, css, sql, bash, dos, make, etc.[/code].