Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] jak przerobic "plik" na klase
Forum PHP.pl > Forum > PHP
AndyPSV
Jak przerobic ten plik na klase, aby po wywolaniu funkcji $HOW_MUCH->amount('120.01'); zwracal wynik "sto dwadziescia zlotych jeden grosz";
dotychczas wszystko dziala, jednak plik musi byc wywolany bezposrednio aby dzialal

moglby ktos to przerobic? albo pokazac jak to zrobic?
aha, plik musi byc przerobiony na PHP4

  1. <?php
  2.  
  3. if(!function_exists('str_split')){
  4. function str_split($string,$len = 1) {
  5. if ($len < 1) return false;
  6. for($i=0, $rt = Array();$i<ceil(strlen($string)/$len);$i++)
  7. $rt[$i] = substr($string, $len*$i, $len);
  8. return($rt);
  9. }
  10. }
  11.  
  12. $slowa = Array(
  13. 'minus',
  14.  
  15. 'zero',
  16. 'jeden',
  17. 'dwa',
  18. 'trzy',
  19. 'cztery',
  20. 'piec',
  21. 'szesc',
  22. 'siedem',
  23. 'osiem',
  24. 'dziewiec'),
  25.  
  26. 'dziesiec',
  27. 'jedenascie',
  28. 'dwanascie',
  29. 'trzynascie',
  30. 'czternascie',
  31. 'pietnascie',
  32. 'szesnascie',
  33. 'siedemnascie',
  34. 'osiemnascie',
  35. 'dziewietnascie'),
  36.  
  37. 'dziesiec',
  38. 'dwadziescia',
  39. 'trzydziesci',
  40. 'czterdziesci',
  41. 'piecdziesiat',
  42. 'szescdziesiat',
  43. 'siedemdziesiat',
  44. 'osiemdziesiat',
  45. 'dziewiecdziesiat'),
  46.  
  47. 'sto',
  48. 'dwiescie',
  49. 'trzysta',
  50. 'czterysta',
  51. 'piecset',
  52. 'szescset',
  53. 'siedemset',
  54. 'osiemset',
  55. 'dziewiecset'),
  56.  
  57. 'tysiac',
  58. 'tysiace',
  59. 'tysiecy'),
  60.  
  61. 'milion',
  62. 'miliony',
  63. 'milionów'),
  64.  
  65. 'miliard',
  66. 'miliardy',
  67. 'miliardów'),
  68.  
  69. 'bilion',
  70. 'biliony',
  71. 'bilionów'),
  72.  
  73. 'biliard',
  74. 'biliardy',
  75. 'biliardów'),
  76.  
  77. 'trylion',
  78. 'tryliony',
  79. 'trylionów'),
  80.  
  81. 'tryliard',
  82. 'tryliardy',
  83. 'tryliardów'),
  84.  
  85. 'kwadrylion',
  86. 'kwadryliony',
  87. 'kwadrylionów'),
  88.  
  89. 'kwintylion',
  90. 'kwintyliony',
  91. 'kwintylionów'),
  92.  
  93. 'sekstylion',
  94. 'sekstyliony',
  95. 'sekstylionów'),
  96.  
  97. 'septylion',
  98. 'septyliony',
  99. 'septylionów'),
  100.  
  101. 'oktylion',
  102. 'oktyliony',
  103. 'oktylionów'),
  104.  
  105. 'nonylion',
  106. 'nonyliony',
  107. 'nonylionów'),
  108.  
  109. 'decylion',
  110. 'decyliony',
  111. 'decylionów')
  112. );
  113.  
  114. function odmiana($odmiany, $int){ // $odmiany = Array('jeden','dwa','piec')
  115. $txt = $odmiany[2];
  116. if ($int == 1) $txt = $odmiany[0];
  117. $jednosci = (int) substr($int,-1);
  118. $reszta = $int % 100;
  119. if (($jednosci > 1 && $jednosci < 5) &! ($reszta > 10 && $reszta < 20))
  120. $txt = $odmiany[1];
  121. return $txt;
  122. }
  123.  
  124. function liczba($int){ // odmiana dla liczb < 1000
  125. global $slowa;
  126. $wynik = '';
  127. $j = abs((int) $int);
  128.  
  129. if ($j == 0) return $slowa[1][0];
  130. $jednosci = $j % 10;
  131. $dziesiatki = ($j % 100 - $jednosci) / 10;
  132. $setki = ($j - $dziesiatki*10 - $jednosci) / 100;
  133.  
  134. if ($setki > 0) $wynik .= $slowa[4][$setki-1].' ';
  135.  
  136. if ($dziesiatki > 0)
  137. if ($dziesiatki == 1) $wynik .= $slowa[2][$jednosci].' ';
  138. else
  139. $wynik .= $slowa[3][$dziesiatki-1].' ';
  140.  
  141. if ($jednosci > 0 && $dziesiatki != 1) $wynik .= $slowa[1][$jednosci].' ';
  142. return $wynik;
  143. }
  144.  
  145. function slownie($int){
  146.  
  147. global $slowa;
  148.  
  149. $in = preg_replace('/[^-\d]+/','',$int);
  150. $out = '';
  151.  
  152. if ($in{0} == '-'){
  153. $in = substr($in, 1);
  154. $out = $slowa[0].' ';
  155. }
  156.  
  157. $txt = str_split(strrev($in), 3);
  158.  
  159. if ($in == 0) $out = $slowa[1][0].' ';
  160.  
  161. for ($i = count($txt) - 1; $i >= 0; $i--){
  162. $liczba = (int) strrev($txt[$i]);
  163. if ($liczba > 0)
  164. if ($i == 0)
  165. $out .= liczba($liczba).' ';
  166. else
  167. $out .= ($liczba > 1 ? liczba($liczba).' ' : '')
  168. .odmiana( $slowa[4 + $i], $liczba).' ';
  169. }
  170. return trim($out);
  171. }
  172. function kwotaslownie($kwota){
  173. $kwota = explode('.', $kwota);
  174.  
  175. $zl = preg_replace('/[^-\d]+/','', $kwota[0]);
  176. $gr = preg_replace('/[^\d]+/','', substr(isset($kwota[1]) ? $kwota[1] : 0, 0, 2));
  177. while(strlen($gr) < 2) $gr .= '0';
  178.  
  179. echo slownie($zl) . ' ' . odmiana(Array('zloty', 'zlote', 'zlotych'), $zl) .
  180. (intval($gr) == 0 ? '' :
  181. ' ' . slownie($gr) . ' ' . odmiana(Array('grosz', 'grosze', 'groszy'), $gr));
  182. }
  183.  
  184. ?>


jeszcze jakby ktos polskie "ogonki" poprawil to bylbym wniebowziety
thek
Oczywiście że pomożemy -> http://www.php.net/manual/en/language.oop5.php
AndyPSV
to chociaz - co zrobic, aby ten skrypt zwrocil mi wartosc bez przerabiania go?

on zwraca tylko wynik funkcji jak odpali sie go bezposrednio i ustawi funkcje w nim echo kwotaslownie("21.40"); wtedy tylko dziala
pomocy
askone
Cytat(AndyPSV @ 23.08.2010, 10:04:46 ) *
to chociaz - co zrobic, aby ten skrypt zwrocil mi wartosc bez przerabiania go?

on zwraca tylko wynik funkcji jak odpali sie go bezposrednio i ustawi funkcje w nim echo kwotaslownie("21.40"); wtedy tylko działa


Przecież zwraca wartość - tak napisałeś winksmiley.jpg Jeśli nie chcesz aby funkcja wyświetlała swój wynik na ekranie to zamiast echo zrób return - wtedy wynik zapisz w zmiennej i rób z nim cokolwiek zechcesz.

Pozdrawiam
MacDada
Taka mała ściąga, na której możesz się wzorować:

  1. <?php
  2.  
  3. $wynik = ProstaMatma::$zmiennaStatyczna; //10
  4.  
  5. $wynik = ProstaMatma::dajPiataka(); // 5
  6.  
  7. $wynik = ProstaMatma::obliczIloczyn(8, 3); // 24
  8.  
  9. $matma = new ProstaMatma();
  10. $wynik = $matma->obliczSume(4, 3); // 7
  11.  
  12.  
  13. class ProstaMatma
  14. {
  15. public static $zmiennaStatyczna = 10;
  16.  
  17. public static function dajPiataka()
  18. {
  19. return 5;
  20. }
  21.  
  22. public static function obliczIloczyn($liczba1, $liczba2)
  23. {
  24. return ($liczba1 * $liczba2);
  25. }
  26.  
  27. public function obliczSume($liczba1, $liczba2)
  28. {
  29. return ($liczba1 + $liczba2);
  30. }
  31. }
  32.  
  33.  
  34. ?>
AndyPSV
PRZEROBILEM TA FUNKCJE (patrz nizej) jednak dalej nie dziala sad.gif co jest?

  1. <?php
  2.  
  3. class D2W_pl {
  4. function getSlowa() {
  5. $slowa = Array(
  6. 'minus',
  7.  
  8. 'zero',
  9. 'jeden',
  10. 'dwa',
  11. 'trzy',
  12. 'cztery',
  13. 'piec',
  14. 'szesc',
  15. 'siedem',
  16. 'osiem',
  17. 'dziewiec'),
  18.  
  19. 'dziesiec',
  20. 'jedenascie',
  21. 'dwanascie',
  22. 'trzynascie',
  23. 'czternascie',
  24. 'pietnascie',
  25. 'szesnascie',
  26. 'siedemnascie',
  27. 'osiemnascie',
  28. 'dziewietnascie'),
  29.  
  30. 'dziesiec',
  31. 'dwadziescia',
  32. 'trzydziesci',
  33. 'czterdziesci',
  34. 'piecdziesiat',
  35. 'szescdziesiat',
  36. 'siedemdziesiat',
  37. 'osiemdziesiat',
  38. 'dziewiecdziesiat'),
  39.  
  40. 'sto',
  41. 'dwiescie',
  42. 'trzysta',
  43. 'czterysta',
  44. 'piecset',
  45. 'szescset',
  46. 'siedemset',
  47. 'osiemset',
  48. 'dziewiecset'),
  49.  
  50. 'tysiac',
  51. 'tysiace',
  52. 'tysiecy'),
  53.  
  54. 'milion',
  55. 'miliony',
  56. 'milionów'),
  57.  
  58. 'miliard',
  59. 'miliardy',
  60. 'miliardów'),
  61.  
  62. 'bilion',
  63. 'biliony',
  64. 'bilionów'),
  65.  
  66. 'biliard',
  67. 'biliardy',
  68. 'biliardów'),
  69.  
  70. 'trylion',
  71. 'tryliony',
  72. 'trylionów'),
  73.  
  74. 'tryliard',
  75. 'tryliardy',
  76. 'tryliardów'),
  77.  
  78. 'kwadrylion',
  79. 'kwadryliony',
  80. 'kwadrylionów'),
  81.  
  82. 'kwintylion',
  83. 'kwintyliony',
  84. 'kwintylionów'),
  85.  
  86. 'sekstylion',
  87. 'sekstyliony',
  88. 'sekstylionów'),
  89.  
  90. 'septylion',
  91. 'septyliony',
  92. 'septylionów'),
  93.  
  94. 'oktylion',
  95. 'oktyliony',
  96. 'oktylionów'),
  97.  
  98. 'nonylion',
  99. 'nonyliony',
  100. 'nonylionów'),
  101.  
  102. 'decylion',
  103. 'decyliony',
  104. 'decylionów')
  105. );
  106. }
  107.  
  108.  
  109. function str_split($string,$len = 1) {
  110.  
  111. if ($len < 1) return false;
  112.  
  113. for($i=0, $rt = Array();$i<ceil(strlen($string)/$len);$i++)
  114.  
  115. $rt[$i] = substr($string, $len*$i, $len);
  116.  
  117. return($rt);
  118.  
  119. }
  120.  
  121.  
  122.  
  123. function odmiana($odmiany, $int){ // $odmiany = Array('jeden','dwa','piec')
  124.  
  125. $txt = $odmiany[2];
  126.  
  127. if ($int == 1) $txt = $odmiany[0];
  128.  
  129. $jednosci = (int) substr($int,-1);
  130.  
  131. $reszta = $int % 100;
  132.  
  133. if (($jednosci > 1 && $jednosci < 5) &! ($reszta > 10 && $reszta < 20))
  134.  
  135. $txt = $odmiany[1];
  136.  
  137. return $txt;
  138.  
  139. }
  140.  
  141.  
  142.  
  143. function liczba($int){ // odmiana dla liczb < 1000
  144.  
  145.  
  146.  
  147. $slowa = D2W_pl::getSlowa();
  148.  
  149. $wynik = '';
  150.  
  151. $j = abs((int) $int);
  152.  
  153.  
  154.  
  155. if ($j == 0) return $slowa[1][0];
  156.  
  157. $jednosci = $j % 10;
  158.  
  159. $dziesiatki = ($j % 100 - $jednosci) / 10;
  160.  
  161. $setki = ($j - $dziesiatki*10 - $jednosci) / 100;
  162.  
  163.  
  164.  
  165. if ($setki > 0) $wynik .= $slowa[4][$setki-1].' ';
  166.  
  167.  
  168.  
  169. if ($dziesiatki > 0)
  170.  
  171. if ($dziesiatki == 1) $wynik .= $slowa[2][$jednosci].' ';
  172.  
  173. else
  174.  
  175. $wynik .= $slowa[3][$dziesiatki-1].' ';
  176.  
  177.  
  178.  
  179. if ($jednosci > 0 && $dziesiatki != 1) $wynik .= $slowa[1][$jednosci].' ';
  180.  
  181. return $wynik;
  182.  
  183. }
  184.  
  185.  
  186.  
  187. function slownie($int){
  188.  
  189.  
  190.  
  191. $slowa = D2W_pl::getSlowa();
  192.  
  193.  
  194.  
  195. $in = preg_replace('/[^-d]+/','',$int);
  196.  
  197. $out = '';
  198.  
  199.  
  200.  
  201. if ($in{0} == '-'){
  202.  
  203. $in = substr($in, 1);
  204.  
  205. $out = $slowa[0].' ';
  206.  
  207. }
  208.  
  209.  
  210.  
  211. $txt = D2W_pl::str_split(strrev($in), 3);
  212.  
  213.  
  214.  
  215. if ($in == 0) $out = $slowa[1][0].' ';
  216.  
  217.  
  218.  
  219. for ($i = count($txt) - 1; $i >= 0; $i--){
  220.  
  221. $liczba = (int) strrev($txt[$i]);
  222.  
  223. if ($liczba > 0)
  224.  
  225. if ($i == 0)
  226.  
  227. $out .= D2W_pl::liczba($liczba).' ';
  228.  
  229. else
  230.  
  231. $out .= ($liczba > 1 ? D2W_pl::liczba($liczba).' ' : '')
  232.  
  233. .D2W_pl::odmiana( $slowa[4 + $i], $liczba).' ';
  234.  
  235. }
  236.  
  237. return trim($out);
  238.  
  239. }
  240.  
  241.  
  242.  
  243. function kwotaslownie($kwota){
  244.  
  245. $kwota = explode('.', $kwota);
  246.  
  247.  
  248.  
  249. $zl = preg_replace('/[^-d]+/','', $kwota[0]);
  250.  
  251. $gr = preg_replace('/[^d]+/','', substr(isset($kwota[1]) ? $kwota[1] : 0, 0, 2));
  252.  
  253. while(strlen($gr) < 2) $gr .= '0';
  254.  
  255.  
  256.  
  257. echo D2W_pl::slownie($zl) . ' ' . D2W_pl::odmiana(Array('zloty', 'zlote', 'zlotych'), $zl) .
  258.  
  259. (intval($gr) == 0 ? '' :
  260.  
  261. ' ' . D2W_pl::slownie($gr) . ' ' . D2W_pl::odmiana(Array('grosz', 'grosze', 'groszy'), $gr));
  262.  
  263. }
  264.  
  265. }
  266.  
  267. ?>
askone
  • Przeniosłeś wszystkie funkcje do klasy - OK
  • Wcześniej widziałem wersję w której każda z nich była zadeklarowana jako static - teraz już nie - dlaczego??
  • Czym się kierowałeś deklarując je jako public? Czy użyszkodnik ma mieć dostęp do każdej z nich, czy tylko do kwotasłownie?
  • Wewnątrz funkcji odwołujesz się do innych funkcji z tej klasy poprzez D2W_pl::getSlowa() - takie wywołanie dotyczy tylko funkcji static, a poza tym jeśli wywołujesz funkcje tej samej klasy to możesz zrobić self::getSlowa() - dla static. Jeśli natomiast nie są to funkcje static to wtedy $this->getSlowa().


Algorytmu nie sprawdzam - skoro działał jako funkcje to po zamianie (poprawnej) na OOP musi działać smile.gif
AndyPSV
wlasnie byl problem... z dzialaniem (o to chodzi zeby go naprawic) -

Cytat
dostaje to samo, komunikat: "zlotych" na poczatku skryptu.
Skrypt dziala jedynie w momencie otworzenia go "BEZPOSREDNIO", czyli skrypt.php i gdy jest jeszcze dorzucone na samym dole echo kwotaslownie('10.01');


Potrzebuje uzyc go zewnetrznie, do faktury - moglby ktos go naprawic?
askone
Cytat(AndyPSV @ 23.08.2010, 12:57:03 ) *
Potrzebuje uzyc go zewnetrznie, do faktury - moglby ktos go naprawic?


Naprawić = wykonać pracę => zlecenie w dziale kupię smile.gif
AndyPSV
tego co nie dziala, czy nazwy funkcji - zmienilem wszystkie nazwy zmiennych funkcji tez - cos nie dziala
znalazlem rozwiazanie: kwotaslownie($_GET['amount']);
faktycznie, skrypt dziala...

dzieki serdeczne, pozdrawiam
http://path-of-power.com/,207
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.