Imaginons que je sois dans un objet Pages qui gère les pages d'un site (cas réel), je veux avoir un système de signaux qui permette de greffer des plugins sur mon code de manière propre. Je vais donc avoir une méthode de ce genre :
public function createPage($title, $lang, $uri = '', $online = true)
{
$this->emitSignal('page.create.before', $title, $lang, $uri, $online);
DB::query('INSERT INTO pages (id, title, lang, uri, online) VALUES (NULL, \''.DB::escape($title).'\', ....
}
OK et je veux que emitSignals transmette les arguments en référence au callback du plugin. Je ne peux donc pas faire ça :
public function emitSignal($name)
{
$callback = array('myPlugin', 'myCallback');
call_user_func($callback, &$this, func_get_args());
}
Ça aurait été bien pratique mais func_get_args ne sait pas renvoyer une référence des arguments. Va donc falloir ruser :
En priant très fort qu'on n'ait jamais besoin de plus de 9 arguments (déjà que le code est horrible). PHP a plein de ce genre de lacunes avec lesquelles il faut composer dès qu'on veux faire des trucs un chouia complexe. Ça s'améliore avec le temps heureusement (et PHP6 est très prometteur sur ce point), mais faut encore faire avec. Donc dans un sens je peux comprendre les mecs de NPDS, même si l'idée de base est mauvaise (irk).
Sinon dans les autres trucs rigolos :
define('<?php die("HUHUHU"); ?>', 'AH AHAHAHHA');
Contrairement à toute attente (et au manuel PHP qui dis que seuls certains caractères sont autorisés dans le nom d'un define), ça fonctionne. On ne peut pas accéder au define (à part avec get_defined_constants()) mais on peux le définir...
« Je vois bien à quels excès peut conduire une démocratie d'opinion débridée, je le vis tous les jours. » (Nicolas Sarkozy)
[^] # Re: Avec les trous de sécus en plus !
Posté par BohwaZ (site web personnel, Mastodon) . En réponse au journal ha le php et ses élites. Évalué à 1.
Imaginons que je sois dans un objet Pages qui gère les pages d'un site (cas réel), je veux avoir un système de signaux qui permette de greffer des plugins sur mon code de manière propre. Je vais donc avoir une méthode de ce genre :
public function createPage($title, $lang, $uri = '', $online = true)
{
$this->emitSignal('page.create.before', $title, $lang, $uri, $online);
DB::query('INSERT INTO pages (id, title, lang, uri, online) VALUES (NULL, \''.DB::escape($title).'\', ....
}
OK et je veux que emitSignals transmette les arguments en référence au callback du plugin. Je ne peux donc pas faire ça :
public function emitSignal($name)
{
$callback = array('myPlugin', 'myCallback');
call_user_func($callback, &$this, func_get_args());
}
Ça aurait été bien pratique mais func_get_args ne sait pas renvoyer une référence des arguments. Va donc falloir ruser :
public function emitSignal($signal, &$arg1 = null, &$arg2 = null, &$arg3 = null, &$arg4 = null, &$arg5 = null, &$arg6 = null, &$arg7 = null, &$arg8 = null, &$arg9 =
null)
{
$callback = array('myPlugin', 'myCallback');
call_user_func($callback, &$this, &$arg1, &$arg2, &$arg3, &$arg4, &$arg5, &$arg6, &$arg7, &$arg8, &$arg9);
}
En priant très fort qu'on n'ait jamais besoin de plus de 9 arguments (déjà que le code est horrible). PHP a plein de ce genre de lacunes avec lesquelles il faut composer dès qu'on veux faire des trucs un chouia complexe. Ça s'améliore avec le temps heureusement (et PHP6 est très prometteur sur ce point), mais faut encore faire avec. Donc dans un sens je peux comprendre les mecs de NPDS, même si l'idée de base est mauvaise (irk).
Sinon dans les autres trucs rigolos :
define('<?php die("HUHUHU"); ?>', 'AH AHAHAHHA');
Contrairement à toute attente (et au manuel PHP qui dis que seuls certains caractères sont autorisés dans le nom d'un define), ça fonctionne. On ne peut pas accéder au define (à part avec get_defined_constants()) mais on peux le définir...
« Je vois bien à quels excès peut conduire une démocratie d'opinion débridée, je le vis tous les jours. » (Nicolas Sarkozy)