Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Klasa] Router, Moje pierwsze praktyczne kroki w OOP i prośba o ocenę :)
mathev19
post
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 22.11.2009
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


Na wstępie chciałem się ze wszystkimi przywitać, ponieważ jest to mój pierwszy post.
Dobrze przejdźmy więc do rzeczy napisałem sobie klasę Routera, której kod możecie zobaczyć poniżej. Przede wszystkim proszę o obiektywną krytykę bo jest to moja pierwsza klasa. (IMG:style_emoticons/default/snitch.gif)
  1. <?php
  2.  
  3. class Router {
  4. private $sPath = null;
  5. private $sController = null;
  6. private $sAction = null;
  7. private $aUrlSegments = array();
  8. private $aParams = array();
  9.  
  10. public function __construct() {
  11. $this->sPath = $_SERVER['PATH_INFO'];
  12. $this->setUrlSegments();
  13. $this->setController();
  14. $this->setAction();
  15. $this->setParams();
  16. }
  17.  
  18. /**
  19. * pobiera nazwę serwera
  20. * @return string
  21. */
  22. public function getServerName() {
  23. return $_SERVER['HTTP_HOST'];
  24. }
  25.  
  26. /**
  27. * pobiera ścieżkę i dzieli ją na segmenty
  28. * następnie umieszcza wszystko w tablicy aUrlSegments
  29. */
  30. private function setUrlSegments() {
  31. $this->aUrlSegments = explode('/', $this->sPath);
  32. }
  33.  
  34. /**
  35. * ustawia nazwę controllera
  36. */
  37. private function setController() {
  38. $this->sController = $this->getUrlSegment(1);
  39. }
  40.  
  41. /**
  42. * pobiera nazwę controllera
  43. */
  44. public function getController() {
  45. return $this->sController;
  46. }
  47.  
  48. /**
  49. * ustawia nazwę akcji
  50. */
  51. private function setAction() {
  52. $this->sAction = $this->getUrlSegment(2);
  53. }
  54.  
  55. /**
  56. * pobiera nazwę akcji
  57. */
  58. public function getAction() {
  59. return $this->sAction;
  60. }
  61.  
  62. /**
  63. * pobiera segment URL'a o wyznaczonym id
  64. * @param int $id
  65. * @return string
  66. */
  67. public function getUrlSegment($id) {
  68. return (isset($this->aUrlSegments[$id])) ? $this->aUrlSegments[$id] : false;
  69. }
  70.  
  71. /**
  72. * ustawia parametry z URL'a
  73. */
  74. private function setParams(){
  75. $this->aParams = array_slice($this->aUrlSegments,3);
  76. }
  77.  
  78. /**
  79. * pobiera parametry z URL'a
  80. */
  81. public function getParams(){
  82. return $this->aParams;
  83. }
  84.  
  85. /**
  86. * tworzy adres URL
  87. * @param string $sController
  88. * @param string $sAction
  89. * @param array $aParams
  90. * @return string
  91. */
  92. public function createUrl($sController,$sAction,$aParams) {
  93. return $this->getServerName().'/index.php/'.$sController.'/'.$sAction.'/'.$aParams[0].'/'.$aParams[1].'/'.$aParams[2];
  94. }
  95. }
  96.  
  97. ?>

Teraz moje pytania dotyczące ów klasy:
1. Czy ogólny sposób napisania Routera jest zgodny z filozofią OOP?
2. Co mogę napisać inaczej (czyt. lepiej)?
3. W jaki sposób prawidłowo tworzyć URL'e (metoda createUrl, na którą jak widać w kodzie nie mam zupełnie pomysłu) (IMG:style_emoticons/default/sadsmiley02.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Luneth
post
Post #2





Grupa: Zarejestrowani
Postów: 95
Pomógł: 7
Dołączył: 16.07.2007
Skąd: Gorzów Wielkopolski

Ostrzeżenie: (0%)
-----


@ Crozin
Dependency Injection, ok, ale wszędzie musisz przekazywać przez parametr zmienną $container wskazującą na obiekt kontenera, jedynie aby uniknąć jednej zmiennej statycznej. Czy to ma sens?

Ten post edytował Luneth 2.08.2010, 01:48:22
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 10.06.2026 - 12:34