Application
- Object
- Once
- Application
- Once
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
- namespace Application;
- use \InvalidArgumentException as InvalidArgumentException;
- require_once 'So-o.php';
- require_once 'Once.php';
- 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
- function i_init($self, $appName=null, $app=null) {
- if (!(is_null($appName) or is_string($appName))) {
- throw new InvalidArgumentException();
- }
- if (!(is_null($app) or is_object($app))) {
- throw new InvalidArgumentException();
- }
- supersend('init', func_get_args());
- if ($appName) {
- sendmsg($self, 'set', 'appName', $appName);
- if ($app) {
- sendmsg($self, 'set', 'app', $app);
- }
- }
- return $self;
- }
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
- function i_appName($self) {
- return sendmsg($self, 'get', 'appName');
- }
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
- function i_doesNotRecognize($self, $msg) {
- $app=sendmsg($self, 'get', 'app');
- if (!$app) {
- return supersend('doesNotRecognize', func_get_args());
- }
- return sendmsg($app, 'perform', $msg, array_slice(func_get_args(), 2));
- }
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
Commentaires