16

Application

  1. Object
    1. Once
      1. Application

Une classe Application n'a qu'une seule instance. Une instance d'Application peut avoir un nom. Elle peut être associée à un mandataire qui interprétera tous les messages qu'elle reçoit mais qu'elle n'implémente pas.

MÉTHODES D'INSTANCE

  1. namespace Application;
  2.  
  3. use \InvalidArgumentException as InvalidArgumentException;
  4.  
  5. require_once 'So-o.php';
  6.  
  7. require_once 'Once.php';
  8.  
  9. defclass('Application', $Once, 1, null, array('appName', 'app'), null, array('init', 'appName', 'doesNotRecognize'));

La classe Application hérite de la classe Once. Les propriétés d'instance appName et app contiennent le nom d'une instance d'Application et la référence de son mandataire. La classe Application redéfinit les messages d'instance init et doesNotRecognize. Elle ajoute le message d'instance appName.

init
SYNOPSIS

sendmsg($self, 'init', $appName=null, $app=null)

DESCRIPTION

init initialise le nom et le mandataire de $self avec $appName et $app.

CODE
  1. function i_init($self, $appName=null, $app=null) {
  2.     if (!(is_null($appName) or is_string($appName))) {
  3.         throw new InvalidArgumentException();
  4.     }
  5.  
  6.     if (!(is_null($app) or is_object($app))) {
  7.         throw new InvalidArgumentException();
  8.     }
  9.  
  10.     supersend('init', func_get_args());
  11.  
  12.     if ($appName) {
  13.         sendmsg($self, 'set', 'appName', $appName);
  14.         if ($app) {
  15.             sendmsg($self, 'set', 'app', $app);
  16.         }
  17.     }
  18.  
  19.     return $self;
  20. }

Vérifie si $appName est null ou une chaîne de caractères et si $app est null ou un objet et déclenche une exception InvalidArgumentException en cas d'erreur. Continue en exécutant la méthode init de la superclasse de la classe Application. Initialise les propriétés d'instance appName et app avec les paramètres $appName et $app.

appName
SYNOPSIS

sendmsg($self, 'appName')

DESCRIPTION

appName retourne le nom de l'instance d'Application $self. Si $self n'a pas de nom, appName retourne null.

CODE
  1. function i_appName($self) {
  2.     return sendmsg($self, 'get', 'appName');
  3. }

Retourne la propriété appName de $self.

doesNotRecognize
SYNOPSIS

sendmsg($self, 'doesNotRecognize', $msg)

DESCRIPTION

Une instance d'Application intercepte le message doesNotRecognize qui est automatiquement envoyé à une classe ou à une instance lorsqu'elle reçoit un message qu'elle n'implémente pas.

doesNotRecognize retourne le résultat du renvoi de $msg et de ses paramètres au mandataire de $self, l'instance qui a été passée en paramètre au message new à la création de $self.

Si $self n'a pas de mandataire, doesNotRecognize exécute le message doesNotRecognize dans le contexte de la superclasse de la classe Application, qui exécutera la méthode doesNotRecognize de la classe Object, qui déclenche une erreur PHP.

CODE
  1. function i_doesNotRecognize($self, $msg) {
  2.     $app=sendmsg($self, 'get', 'app');
  3.  
  4.     if (!$app) {
  5.         return supersend('doesNotRecognize', func_get_args());
  6.     }
  7.  
  8.     return sendmsg($app, 'perform', $msg, array_slice(func_get_args(), 2));
  9. }

Initialise $app à la valeur de la propriété app de $self. Si $app est null, retourne le résultat de l'exécution du message doesNotRecognize par la superclasse de la classe Application. Sinon, si $self a un mandataire, retourne le résultat de l'envoi de $msg et de ses paramètres à $app.

EXEMPLE
$ php -a
php > require_once 'Hello.php';
php > $hello=sendmsg($Hello, 'new');
php > sendmsg($hello, 'hello');
Hello from So-o!

Créez une instance d'Application avec $hello comme mandataire :

php > require_once 'Application.php';
php > $app=sendmsg($Application, 'new', 'Hello', $hello);
php > sendmsg($app, 'appName');
Hello

Si vous envoyez le message hello à $app, il est interprété par $hello :

php > sendmsg($app, 'hello');
Hello from So-o!

Essayez un message inconnu :

php > sendmsg($app, 'foobar');
PHP Fatal error:  Hello::foobar Invalid instance message

Essayez sans proxy :

php > sendmsg($app, 'set', 'app', null);
php > sendmsg($app, 'hello');
PHP Fatal error:  Application::hello Invalid instance message
VOIR AUSSI

Once, Responder

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].