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.