Les methodes finales

Eléphant du PHP | 226 Messages

23 févr. 2012, 23:16

Il faut faire ca

ex:
<?php
class Papa
{
public final function meth
{
return 1 ;
}
}

class enfant extends Papa
{
public final function meth
{
return 1 ;
}
}
?>
On t'a déjà dit trois mille fois qu'on ne pouvait pas redéfinir une méthode finale héritée. Tu le fais exprès ? T'a testé ton code ? ça donne quoi ? Normalement cela te donnera le message d'erreur suivant Fatal error: Cannot override final method Papa::meth()
Donc ce n'est pas la peine de déclarer une fonction meth() dans ta classe "enfant" qui hérite de "Papa" puisque "Papa" possède déjà cette fonction et qu'il est interdit de la redéfinir à cause précisément du mot "final".

par contre tu peux faire :
class Papa
{
	public final function meth()
	{
		return 1 ;
	}
	
	public function meth2()
	{
		return 2;
	}
}

class enfant extends Papa
{

	public function meth2()
		{
			return 3;
		}
}
$toto = new enfant();
echo $toto->meth();
echo '<br />';
echo $toto->meth2();

/*resultat
1
3
*/
Alors j'avais raison lorsque j'ai dit:
j'ai lu dans le livre php 5.2 (par google books :lol: ) . La methode final permet d'avoir une fonction que l'heritage ne pourrait pas avoir.

Est-ce tord ?
Djun, L'inoubliable et l'incontournable

ViPHP
AB
ViPHP | 5818 Messages

23 févr. 2012, 23:27

Mon précédent message date de 22h13
Ta réponse date de 22h16

Je doute fort qu'en trois minutes tu aies eu le temps de tester et comprendre le code, et de poster une réponse censée. Et de fait ta réponse est insensée. La phrase "La methode final permet d'avoir une fonction que l'heritage ne pourrait pas avoir" ne veut rien dire ou est fausse. Relis ce qu'on a dit et surtout TESTES LE CODE à la place de poser des questions sur un résultat que tu pourrais constater avec quelques secondes de test. Et prends le temps de comprendre !!!

ViPHP
AB
ViPHP | 5818 Messages

23 févr. 2012, 23:39

...En d'autres termes si tu fais
class Papa
{
	public final function meth()
	{
		return 1 ;
	}
	
	public function meth2()
	{
		return 2;
	}
}

class enfant extends Papa
{

}
$toto = new enfant();
echo $toto->meth();
echo '<br />';
echo $toto->meth2();
/*résultat
1
2
*/
Tu peux faire ce que tu veux dans ta classe "enfant" et même comme dans mon précédent code, redéfinir "meth2", mais pas "meth" à cause du mot final qui t'interdit précisément de la redéfinir. C'est clair comme ça ?
Modifié en dernier par AB le 23 févr. 2012, 23:44, modifié 1 fois.

Eléphant du PHP | 226 Messages

23 févr. 2012, 23:42

Mon précédent message date de 22h13
Ta réponse date de 22h16

Je doute fort qu'en trois minutes tu aies eu le temps de tester et comprendre le code, et de poster une réponse censée. Et de fait ta réponse est insensée. La phrase "La methode final permet d'avoir une fonction que l'heritage ne pourrait pas avoir" ne veut rien dire ou est fausse. Relis ce qu'on a dit et surtout TESTES LE CODE à la place de poser des questions sur un résultat que tu pourrais constater avec quelques secondes de test. Et prends le temps de comprendre !!!
cale-se
Djun, L'inoubliable et l'incontournable

Eléphant du PHP | 226 Messages

23 févr. 2012, 23:44

Je met fin a ma vie.

Merci pour l'aide.
Djun, L'inoubliable et l'incontournable

Eléphant du PHP | 275 Messages

24 févr. 2012, 11:02

Ce type est épique.

Mammouth du PHP | 2278 Messages

24 févr. 2012, 13:13

Je laisse la place à plus patients que moi.
Une remarque s'impose avant de refermer cette parenthèse:
quand on apprend à tirer au Kalachnikov, par exemple, on ne se borne pas à lire "Kalachnikov pour les Nuls" sans jamais passer une seconde à manipuler l'engin. Si le manuel dit que l'écrou N° 94 doit être posé en dernier, après la rondelle autoblocante , au lieu de discourir sur la possibilité de mettre une telle rondelle après l'écrou, on démonte la bête et on ESSAIE.
J'ai lu attentivement les réponses des diverses personnes qui ont crié dans le désert, et on ne peut pas faire plus clair. Si tu avais tapé et testé le quart de la moitié du code qui t'a été proposé, il y a longtemps que tu aurais compris. Mais pour cela il faudrait lire les réponses en entier.
Et, quel que soit le domaine, les exemples précis mais simples sont les bienvenus quand on ne comprend pas.
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphant du PHP | 226 Messages

24 févr. 2012, 14:21

j'economise pour corde, un tabouret, un clou et un marteau. Je vais aussi faire mon testament.
Djun, L'inoubliable et l'incontournable

Eléphant du PHP | 275 Messages

24 févr. 2012, 15:10

Genre ta vie nous intéresse.

Eléphant du PHP | 226 Messages

24 févr. 2012, 15:39

Genre ta vie nous intéresse.
Cale-se gratin de tes....lo
Djun, L'inoubliable et l'incontournable

Mammouth du PHP | 2278 Messages

24 févr. 2012, 16:55

Sans grand espoir d'être mieux compris que tous les autres, mais ça m'a permis une petite révision, car je n'ai pas découvert à temps la possibilité objet de PHP, et je suis trop paresseux pour convertir ce que j'ai déja pondu.
Ce qui suit, inspiré de xtg, je crois, et si ce n'est pas lui, il me pardonnera j'espère, a été testé par mes soins:
   <?php
    class humain
    {
	public final function reproduction ()
	{
		return "fonction reproduction: comme papa-maman ";
	}
	public function parler()
	{
		return "fonction parler: grunch";
	}
	
}

    class francais extends humain
    {
	public function parler()
	{
		return "fonction parler de francais: Je connais ma grandmaire" ;
	}
    }
    class creole extends francais
    {
	public final function parler()
	{
		return "fonction parler de creole: midiavo" ;
	}
      }
 class creolissimo extends creole
    {
	public  function protester()
	{
		$oblige = $this->parler();
		return " fonction protester: je suis obligé de dire".$oblige;
	}
      }
      
   $toto = new humain();
   echo  $toto->reproduction();
   echo $toto->parler();
   echo "<br />";
   $okapi = new francais();
   echo  $okapi->reproduction();
   echo $okapi->parler();
 echo "<br />";
   $fetnat = new creole();
   echo  $fetnat->reproduction();
   echo $fetnat->parler();
  echo "<br />creolissimo";
   $fetnat1 = new creolissimo();
   echo  $fetnat1->reproduction();
   echo $fetnat->parler();
     echo $fetnat1->protester();
   ?>
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

ViPHP
ViPHP | 3300 Messages

24 févr. 2012, 17:38

La réponse est oui.
Fait du php depuis que ca existe ou presque :)

Mammouth du PHP | 2278 Messages

24 févr. 2012, 18:22

j'economise pour corde, un tabouret, un clou et un marteau. Je vais aussi faire mon testament.
#-o #-o Méthode finale très class à exécuter de préférence en privé. Je m'en lave les mains en public. Prions qu'lle ne s'étende pas à tous les programmeurs PHP!!!
Elle est nulle, je sais, mais je n'ai pas pu me retenir... :oops: :oops:
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

24 févr. 2012, 18:34

Genre ta vie nous intéresse.
Cale-se gratin de tes....lo
Modération :
Bon, les enfants, on se calme ?
Le respect existe aussi sur internet, donc pas de fire, ni d'insulte en portugais.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
ViPHP | 3300 Messages

24 févr. 2012, 20:32

La réponse est oui.
n'oublie pas de mettre résolu, et puis de rien ça m'a fait plaisir.
Fait du php depuis que ca existe ou presque :)