2017-03-27 1 views
-1

J'ai créé une classe abstraite et déclare deux fonctions publiques et une fonction abstraite. Après que j'ai créé le corps pour la fonction publique dans la classe abstraite mais quand j'étendant cette classe à une autre classe ce que le corps de la méthode n'appelle pas alors je veux savoir ce qu'est l'utilisation des méthodes publiques avec la classe body.quelle est l'utilisation de la fonction publique avec le corps dans la classe abstraite de php?

<?php 
     //declare abstract class 
     abstract class Test { 

    // declare method 1 with body 
      public function method1() 
      { 
       echo "hello"; //what is use of this code here 
      } 

      public function method2() 
      { 
       $this->method3(); 
      } 

      abstract public function method3(); 
     } 

     //extended abstract class to another class 
     class AnotherTest extends Test{ 

      public function method1(){ 
       echo "5+9"/2; 
      } 

      public function method3(){ 
       echo 2+9; 
      } 

      public function method2() 
      { 
       echo "just for testing"; 
      } 
     } 

     $obj = new AnotherTest(); 

     $obj->method1(); 
     echo nl2br("\n"); 
     $obj->method3(9,10); 
      echo nl2br("\n"); 
     $obj->method2(); 
     ?> 
+0

Eh bien, si vous ne les avez pas écrasés, cela s'appellera la méthode que vous avez déclarée dans 'Test'. Mais vous devriez plutôt lire un peu plus sur OO pour bien comprendre pourquoi et comment cela fonctionne. – JensV

+0

Best to go et RTM http://php.net/manual/fr/language.oop5.abstract.php –

Répondre

0

D'une manière générale, vous ne feriez pas normalement override chaque méthode abstraite. Si vous êtes alors, vous faites quelque chose de mal et devez refactoriser. En outre, ayant le résumé (ou toute classe étendue) vous donne la possibilité d'appeler parent::function() qui permettra à la méthode des parents de fonctionner alors vous pouvez faire de la logique supplémentaire de vos classes actuelles.

En fin de compte c'est la base pour Polymorphism explication simple qu'une classe enfant peut étendre un parent mais agir différemment en changeant le comportement des méthodes. Franchement, votre «test» n'est que de mauvais exemples, car dans ces cas vous avez raison, les corps abstraits sont presque inutiles.

0

L'écriture d'un corps de méthode pour une méthode d'une classe de base fournit un comportement "par défaut" pour cette méthode sur toutes les sous-classes qui ne remplacent pas la méthode.

Pour toute méthode (non final) public ou protected d'une classe de base que vous pouvez faire une des opérations suivantes:

  • Accepter que le comportement par défaut sans modification en ne définissant pas une méthode avec le même nom dans un sous-classe
  • Override et envelopper ce comportement en définissant une nouvelle méthode avec le même nom qui appelle parent::methodName() dans une sous-classe
  • remplacer et remplacer ce comportement en définissant une nouvelle méthode avec le même nom qui ne remet pas parent::methodName() dans une sous-classe

Le principal avantage du code écrit de la sorte est qu'il tire avantage de Polymorphism pour envoyer des appels de méthodes génériques à des implémentations spécifiques. La définition d'un corps de méthode au lieu de le laisser abstrait fournit simplement un comportement par défaut. Comme il s'agit d'un concept de programmation orienté objet très abstrait, il est difficile de mettre en place un exemple à la fois simple et non trivial. Il est préférable de regarder les codes de base populaires tels que le Laravel Framework ou l'un des différents Symfony components pour des exemples de ce concept en action.