Introduction au langage PHP 5 par l'exemple
VII. Exercice d'application - IMPOTS avec objets (impots_03)▲
On reprend l'exercice déjà étudié précédemment (pages et ) pour le résoudre avec un code PHP utilisant une classe.
Sélectionnez 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131.
<?php
class Impôts {
private $limites;
private $coeffR;
private $coeffN;
public function __construct($IMPOTS) {
if (!file_exists ($IMPOTS)) {
throw new Exception("Le fichier $IMPOTS n'existe pas");
}
$tables = file ($IMPOTS);
if (!$tables) {
throw new Exception("Erreur lors de l'exploitation du fichier $IMPOTS");
}
$u = new Utilitaires();
$this->limites = explode (":", $u->cutNewLineChar($tables[0]));
$this->coeffR = explode (":", $u->cutNewLineChar($tables[1]));
$this->coeffN = explode (":", $u->cutNewLineChar($tables[2]));
}
public function calculer($marié, $enfants, $salaire) {
$marié = strtolower ($marié);
if ($marié == "oui")
$nbParts = $enfants / 2 + 2;
else
$nbParts=$enfants / 2 + 1;
if ($enfants >= 3)
$nbParts+=0.5;
$revenuImposable = 0.72 * $salaire;
$quotient = $revenuImposable / $nbParts;
$this->limites[count ($this->limites) - 1] = $quotient;
$i = 0;
while ($quotient > $this->limites[$i])
$i++;
return floor ($revenuImposable * $this->coeffR[$i] - $nbParts * $this->coeffN[$i]);
}
}
class Utilitaires {
public function cutNewLinechar($ligne) {
$L = strlen ($ligne);
while (substr ($ligne, $L - 1, 1) == "\n" or substr ($ligne, $L - 1, 1) == "\r") {
$ligne = substr ($ligne, 0, $L - 1);
$L--;
}
return($ligne);
}
}
$DATA = "data.txt";
$RESULTATS = "resultats.txt";
$IMPOTS = "impots.txt";
try {
$I = new Impôts($IMPOTS);
} catch (Exception $e) {
print $e->getMessage();
exit ;
}
$u = new Utilitaires();
$data = fopen ($DATA, "r");
if (!$data) {
print "Impossible d'ouvrir en lecture le fichier des données [$DATA]\n";
exit ;
}
$résultats = fopen ($RESULTATS, "w");
if (!$résultats) {
print "Impossible de créer le fichier des résultats [$RESULTATS]\n";
exit ;
}
while ($ligne = fgets ($data, 100)) {
$ligne = $u->cutNewLineChar($ligne);
list($marié, $enfants, $salaire) = explode (",", $ligne);
$impôt = $I->calculer($marié, $enfants, $salaire);
fputs ($résultats, "$marié:$enfants:$salaire:$impôt\n");
}
fclose ($data);
fclose ($résultats);
print "Terminé\n";
exit ;
?>
Le fichier [impots.txt] :
Sélectionnez 1. 2. 3.
12620:13190:15640:24740:31810:39970:48360:55790:92970:127860:151250:172040:195000:0
0:0.05:0.1:0.15:0.2:0.25:0.3:0.35:0.4:0.45:0.5:0.55:0.6:0.65
0:631:1290.5:2072.5:3309.5:4900:6898.5:9316.5:12106:16754.5:23147.5:30710:39312:49062
Le fichier [data.txt]
Sélectionnez 1. 2. 3. 4. 5. 6.
oui,2,200000
non,2,200000
oui,3,200000
non,3,200000
oui,5,50000
non,0,3000000
Résultats : ceux déjà obtenus dans les versions avec tableaux et fichiers.
Le fichier [resultats.txt]
Sélectionnez 1. 2. 3. 4. 5. 6.
oui:2:200000:22504
non:2:200000:33388
oui:3:200000:16400
non:3:200000:22504
oui:5:50000:0
non:0:3000000:1354938
Commentaires
ligne 4 : la classe Impôts . Elle encapsule des données et des méthodes permettant le calcul de l'impôt :
données : lignes 7-9 - ce sont les trois tableaux de données permettant le calcul de l'impôt. Ces trois tableaux sont initialisés par le constructeur de la ligne 13 à partir d'un fichier texte.
méthodes : ligne 32 - la méthode calculer permet de calculer l'impôt.
lignes 17, 22 : lorsque le constructeur ne peut pas construire l'objet Impôts , il lance une exception.
ligne 25 : la classe Utilitaires a été définie pour encapsuler la fonction cutNewLineChar .
lignes 26-28 : initialisation des trois champs privés de la classe Impôts
ligne 32 : la méthode calculer de la classe Impôts permet de calculer l'impôt d'un contribuable.
lignes 65-78 : la classe Utilitaires
lignes 89-94 : construction d'un objet Impôts avec gestion de l'exception éventuelle. Cette construction va exploiter le fichier texte $IMPOTS pour mettre son contenu dans les trois champs privés de l'objet Impôts .
lignes 96 : construction d'un objet Utilitaires pour disposer de la fonction cutNewLineChar .
Le contenu de cet article est rédigé par Serge Tahé et est mis à disposition selon les termes de la
Licence Creative Commons Attribution - Pas d'Utilisation Commerciale - Partage dans les Mêmes Conditions 3.0 non transposé .
Les logos Developpez.com, en-tête, pied de page, css, et look & feel de l'article sont Copyright © 2011 Developpez.com.