Impossible de redéclarer une fonction

Eléphanteau du PHP | 17 Messages

05 déc. 2011, 11:37

Bonjour,

en PHP est-il possible de remplacer par exemple test() par une nouvelle fonction test() différente, j'ai un message d'erreur "Cannot redeclare" ?

merci

ViPHP
xTG
ViPHP | 7331 Messages

05 déc. 2011, 11:58

Non ce n'est pas possible.
Cela se fait uniquement en POO avec une classe héritée qui peut redéfinir une fonction de la class mère si elle n'est pas de type final.

Eléphant du PHP | 171 Messages

05 déc. 2011, 21:29

Salut,

Comme le dit bien xTG, il est impossible de redéclarer une fonction mais je te laisse voir avec l'utilisation des espaces de noms qui pourrait peut être te convenir.
http://php.net/manual/fr/language.namespaces.php
Le bon jugement s'apprend par l'expérience qui s'acquiert en partie par le mauvais jugement.

devlop78
Invité n'ayant pas de compte PHPfrance

06 déc. 2011, 03:14

J'allais le dire (pour les namespaces). En fait cela ne revient pas à redéclarer la fonction, puisqu'elle se trouve dans un autre namespace, mais c'est bien là l'une des utilités du namespace. Tu peux aussi déclarer une fonction en fonction d'une situation :

Code : Tout sélectionner

if ($toto == "tombé à l'eau") { function x () { } } else { function x () { } }
En sachant que le création en interne ne se fait pas de la même façon :

- Déjà c'est pas propre
- pas de cache OP-codes correct il me semble dans ce cas
- l'appel à la fonction x devra se faire APRES sa déclaration, ce qui n'est pas le cas en temps normal

Tu peux aussi (puisqu'on parle de php 5.3) créer des "fonctions anonymes" dans des variables :

Code : Tout sélectionner

$x = function ($a, $b) { return $a * $b; }; $x = function($a, $b) { return $a + $b; }; $x (25, 30);
Le plus propre étant évidemment les namespaces. Sinon, c'est surement un problème de méthodologie ...