Page 1 sur 4
Les methodes finales
Posté : 21 févr. 2012, 23:33
par djun
Bonjour,
J'ai lu un tuto sur internet à propos des classes et methodes abstraite et final. Je n'ai pas compris les methodes finales. Quelqu'un pourrait me l'expliquer?
Re: Les methodes finales
Posté : 22 févr. 2012, 00:14
par moogli
final égale non définissable en cas d'héritage.
en clair
class truc {
public final function chose () {
}
}
class truc2 extends truc {
public final function chose () { // emet une erreur
}
}
@+
Re: Les methodes finales
Posté : 22 févr. 2012, 00:19
par djun
Si j'ai compris si on fait c'est bon:
class truc {
protected $chose ;
public final function chose ()
{
return $this->chose ;
}
}
class truc2 extends truc {
public final function chose ()
}
Re: Les methodes finales
Posté : 22 févr. 2012, 00:26
par moogli
non fonction
ne peux pas être redéfinie dans une classe fille a cause du final
c'est bien expliquer dans la doc =>
http://fr.php.net/manual/fr/language.oop5.final.php
@+
Re: Les methodes finales
Posté : 22 févr. 2012, 02:26
par djun
Je devrais comprendre plus dans php.net...
Re: Les methodes finales
Posté : 22 févr. 2012, 02:35
par djun
j'ai lu dans le livre php 5.2 (par google books

) . La methode final permet d'avoir une fonction que l'heritage ne pourrait pas avoir.
Est-ce tord ?
Re: Les methodes finales
Posté : 22 févr. 2012, 09:16
par xTG
Non non une classe héritée peut très bien l'appeler.
Mais elle ne peut la redéfinir par contre.
Avec l'héritage on peut faire ceci par exemple :
class Pere{
public function test(){
return 1;
}
}
class Fils extend Pere{
public function test(){
return 2;
}
}
Là on redéfinit la fonction et on la change complètement.
Mais si dans la class Pere j'avais mis cette fonction en final je n'aurai pas pu la redéfinir.
C'est le but du mot final, il veut dire que les class filles (qui héritent) ne peuvent pas la redéfinir.
Re: Les methodes finales
Posté : 22 févr. 2012, 13:57
par sirakawa
j'ai lu dans le livre php 5.2 (par google books

) . La methode final permet d'avoir une fonction que l'heritage ne pourrait pas avoir.
Est-ce tord ?
Il va falloir esssayer de comprendre ce que te disent moogli et Xtg en réfléchissant à:
héritage, utilisation (ou appel), redéfinition
Quant à avoir, dans ce contexte, c'est profond dans le sens de creux : ne veut rien dire.
Re: Les methodes finales
Posté : 22 févr. 2012, 22:22
par djun
Non non une classe héritée peut très bien l'appeler.
Mais elle ne peut la redéfinir par contre.
Avec l'héritage on peut faire ceci par exemple :
class Pere{
public function test(){
return 1;
}
}
class Fils extend Pere{
public function test(){
return 2;
}
}
Là on redéfinit la fonction et on la change complètement.
Mais si dans la class Pere j'avais mis cette fonction en final je n'aurai pas pu la redéfinir.
C'est le but du mot final, il veut dire que les class filles (qui héritent) ne peuvent pas la redéfinir.
sa génère une erreur?!
Re: Les methodes finales
Posté : 22 févr. 2012, 22:24
par djun
j'ai lu dans le livre php 5.2 (par google books

) . La methode final permet d'avoir une fonction que l'heritage ne pourrait pas avoir.
Est-ce tord ?
Il va falloir esssayer de comprendre ce que te disent moogli et Xtg en réfléchissant à:
héritage, utilisation (ou appel), redéfinition
Quant à avoir, dans ce contexte, c'est profond dans le sens de creux : ne veut rien dire.
Prend une c...
Re: Les methodes finales
Posté : 22 févr. 2012, 22:25
par sirakawa
Essaie et tu verras bien!!!
Re: Les methodes finales
Posté : 22 févr. 2012, 22:29
par moogli
le code de xTG donne une erreur oui, il a oublié un s c'est extends
il serait bon que tu regarde un peu la syntaxe et que tu utilise un ide te l'indiquant ^^
@+
Re: Les methodes finales
Posté : 22 févr. 2012, 22:32
par djun
class Pere{
public function test(){
return 1;
}
}
class Fils extend Pere{
public function test(){
return 1;
}
}
Je n'ai pas redefini ma function. Il permet que la function soit pas redefinit
Re: Les methodes finales
Posté : 22 févr. 2012, 22:33
par djun
Essaie et tu verras bien!!!
a..s dilacerado.
Re: Les methodes finales
Posté : 22 févr. 2012, 22:50
par djun
Attends, je viens juste de lire un autre livre.
Il dit que les methodes finales ne peut pas être redefinie alors pour envoyer une methode finale a une classe enfant il faut faire:
<?php
class ClassPere
{
public final function MaMeth()
{
return 1 ;
}
}
class ClassEnfant extends ClassPere
{
public function Mameth()
}
?>
Est-ce tord?