Créez un nouveau dossier et dedans, créer un fichier composer.json avec le contenu suivant.
{
"name": "votre-nom/zoo",
"autoload": {
"psr-4": {
"App\\":"src"
}
}
}
Pour la suite du projet, le dossier aura cette structure :
.
├── app.php
├── composer.json
└── src
Dans le fichier app.php
il faut ajouter le contenu suivant :
<?php
require __DIR__ . '/vendor/autoload.php';
// Here comes your code.
Pour tester son travail, il faut faire
php app.php
à cette étape du projet, ce fichier lance une erreur. C'est normal.
On va définir le dossier comme étant un projet GIT.
Pour cela, on va effectuer un :
git init
la totalité du projet doit être commité avec la commande git commit -m "mon message de commit"
.
A chaque fin d'étapes, penser à commiter avec un message explicite.
On va initialiser le projet en faisant un composer install
dans le répertoire du projet.
Cela aura pour conséquence de créer un dossier vendor
qui ne doit pas être commit.
À partir de maintenant, tester ses instances se fera dans le fichier app.php, et les classes devront être déclarées dans le namespace 'App' dans le dossier src.
Tip: on n'oublie pas de commit
On va commencer par créer une classe abstraite App\Animal
.
Cette classe aura :
- un attribut name, privé, qui sera définie au constructeur et un accesseur en lecture seulement.
- méthode protégée abstraite appelée
getNoise
qui ne prendra pas de paramètres, et qui renverra une chaine de caractères.⚠️ il faut typer ses valeurs de retour. - Une méthode publique appelée
noise
qui fera un appel à la méthode précédement créée et renverra son résultat.
On va également créer des classes qui vont hériter de la classe App\Animal
:
App\Animals\Fish
App\Animals\BubbleFish
App\Animals\CatFish
App\Animals\ClownFish
App\Animals\Whale
App\Animals\Zebra
App\Animals\Elephant
App\Animals\Parrot
App\Animals\Dove
et implémenter les différentes méthodes de la classe qu'ils héritent. :warning: on veut pousser l'héritage plus loin avec certains animaux en particulier, sans faire de classes abstraites.
Lexique des cris d'animaux :
- L' éléphant :
toooooout
- Le zèbre :
hiiiii
- Le poisson :
bloubloublou
- La baleine :
splash
- Le perroquet :
coco
- La colombe :
Rou Rouuu
Pour tester le code effectué, on va modifier le fichier app.php
:
- on va instancier un tableau
$animals
qui contiendra 5 poissons, 3 boisson bulle, 2 poissons chat, 1 poisson clown, 2 êlephants, 1 Zèbre, 10 perroquets et 2 colombes. - Une fois cela fait, il faudra, avec une simple boucle sur le tableau
$animals
afficher le nom de l'animal et son cri.
Tip: on n'oublie pas de commit
On veut maintenant savoir si les enclos sont adaptés aux besoins. Notre Zoo aura 3 enclos :
- Aquarium
- Aviary
- Fence
La règle est simple : Si un animal peut voler, il faut le mettre dans la volière, s'il peut marcher il faut le mettre dans un enclos, et s'il ne peut que nager, il faut le mettre dans l' aquarium.
On va donc créer des interfaces: App\Interfaces\CanSwim
, App\Interfaces\CanFly
, App\Interfaces\CanWalk
.
Ces interfaces ne déclareront pas de méthodes supplémentaires. Ajouter une ou plusieurs de ces interfaces aux différentes classes.
Il faut créer une classe Enclosure
qui va contenir un tableau animals
avec une méthode addAnimal
qui prendra un Animal en paramètre. et une méthode to String qui nous permettra de voir (et d'entendre crier) les animaux !
On va enfin créer une classe App\Zoo
qui aura 3 attributs privés de type Enclosure : aquarium, aviary et fence.
Cette classe aura 3 méthodes pour récupérer l'aquarium, la volière et la cage.
Créer la méthode publique qui s'appellera également addAnimal
et qui va nous permettre de mettre un Animal dans l'enclos qui lui correspond en fonction de l'interface qu'ils instancient.
Pour terminer sur cette partie, on va créer une méthode static visitTheZoo
, qui va afficher le contenu des différentes cages.
On va modifier l'affichage précédent de app.php pour que cette fois, chaque animal soit mis dans la classe Zoo.
On n'oublie pas de commit
Envoyez votre code sur GitHub dans un repo public partagé avec @DamienDabernat