Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]OOP - kilka pytań o sens i poprawność "mojego" kodu
sadistic_son
post
Post #1





Grupa: Zarejestrowani
Postów: 1 495
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

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


Cześć,
Przerobiłem na własne potrzeby kod z ksiązki ale nie do końca rozumiem, czy robię to logicznie. Generalnie to kod działa, ale sądzę, że mam tam zbędne kawałki. dodatkowo pytanie - czy to w ogóle tak powinno wyglądać?

klasa PageDisplay:
  1. namespace nameOne;
  2.  
  3. class PageDisplay
  4. {
  5. private $request;
  6. private $post;
  7. private $get;
  8.  
  9. public function __construct($request)
  10. {
  11. $requestString = \explode("?", $request);
  12. $this->request = empty($requestString) ? $request : $requestString[0];
  13. }
  14. public function processRequest()
  15. {
  16.  
  17. if (!$this->request) {
  18. return;
  19. }
  20.  
  21. $this->post = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);
  22. $this->get = filter_input_array(INPUT_GET, FILTER_SANITIZE_STRING);
  23.  
  24. switch ($this->request) {
  25. case "/":
  26. $title = 'Product List';
  27. $pageContent = "ProductList";
  28. include("ProductList.php");
  29. break;
  30. case SUBDOMAIN."add-product":
  31. $title = 'Product Add';
  32. $pageContent = "ProductAdd";
  33. include("ProductAdd.php");
  34. break;
  35. case "/mass_delete":
  36. //metoda massDelete
  37. break;
  38. case "/save":
  39. //metoda save new product
  40. break;
  41. default:
  42. $title = 'Product List';
  43. $pageContent = "ProductList";
  44. include("ProductList.php");
  45. break;
  46.  
  47. }
  48. $this->displayHeader($title);
  49. require('views/' . $pageContent . '.view.php');
  50. $this->displayFooter();
  51. }
  52.  
  53.  
  54. private function displayHeader($title)
  55. {
  56. require_once("views/html/header.html");
  57. }
  58.  
  59.  
  60. private function displayFooter()
  61. {
  62. require_once("views/html/footer.html");
  63.  
  64. }
  65.  
  66. }


Teraz w index.php mam wywołanie tej klasy i metod:
  1. include("PageDisplay.php");
  2. $page = new PageDisplay($_SERVER['REQUEST_URI']);
  3. $page->processRequest();


Moje pytania.

1. Uważam, że obiekt klasy PageDisplay jest zbędny. Skoro odwołuję się tylko do jej metod to przerobiłbym processRequest() , displayHeader($title) oraz displayFooter() na metody statyczne i w index.php odwoływałbym się do PageDisplay::processRequest Ma to sens?

2. Czy w $page = new PageDisplay($_SERVER['REQUEST_URI']); powinienem jako paramert podać właśnie REQUEST_URI? Właściwie tylko to działa....

3. Jak mam się odwoływać do $_POST czy $_GET w reszcie kodu ? No bo już nie tradycyjnie if(isset($POST['add'])){ //add(); } skoro mamy taki zapis $this->post = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);

Trochę się w tym pogubiłem i potrzebuję naprowadzenia. Dzięki z góry.

Ten post edytował sadistic_son 5.01.2023, 10:21:38
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




ja mowie o $request przekazanej w konstuktorze i o $this->request ( private $request;).
Ok, w wszczegolnym przypadku beda mialy to samo, ale generalnie $reqiest zawiera twoje URI a $this->request tylko kawalek.
Wiec $reqiest w konstuktorze powinno sie nazywac $uri a $this->reqiest powinno sie nazywac no nie wiem $this->shortUri
ROzumiesz oczym teraz mowie?

Cytat
Ok, tak zrobię. Do wyczyszczenia post z syfu od usera używam filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);

Nie powinno sie uzywac globalnie takich funkcji. Czasami, a w zadsadzie bardzo czesto, chcesz wkladac do bazy dokladnie to co user ci wpisal a nie wyfiltrowane. Filtrujesz tylko wtedy kiedy potrzeba. Takie globalne robienie wszystkiego to syf w kodzie.

Cytat
Czy do $_SERVER['REQUEST_URI'] oraz $_SERVER['HTTP_HOST'] też mam użyć FILTER_SANITIZE_STRING ? Zakładam też że nie filter_input_array bo to są stringi. Czy całą $_SERVER potraktować tym filter_input_array ?

Patrz wyzej

Cytat
Mam hosting o adresie stronka.pl
W nim mam foldery strona1 i strona2. W każdym z tych folderów index.php do obsługi zupełnie innych stron. Strona1 to forum budowlane a strona2 to portal o świnkach morskich smile.gif
No więc stronka.pl/strona1 to zupełnie co innego od stronka.pl/strona2 prawda?

No i wlasnie masz zle. Kazda stronka powinna miec swoja konfiguracje, swoja domene/subdomene (jak to napisal viking) i jej katalog powinieni byc ustawony jako katalog startowy. Wowczas twoj URI zawsze wyglada tak samo
Go to the top of the page
+Quote Post
sadistic_son
post
Post #3





Grupa: Zarejestrowani
Postów: 1 495
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

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


Cytat(nospor @ 5.01.2023, 12:14:13 ) *
ja mowie o $request przekazanej w konstuktorze i o $this->request ( private $request;).
Ok, w wszczegolnym przypadku beda mialy to samo, ale generalnie $reqiest zawiera twoje URI a $this->request tylko kawalek.
Wiec $reqiest w konstuktorze powinno sie nazywac $uri a $this->reqiest powinno sie nazywac no nie wiem $this->shortUri
ROzumiesz oczym teraz mowie?

Tak , terqz juz rozumiem. $request w konstruktorze już nie jest tym samym co $this->request skoro zostało potraktowane $this->request = $requestArray[0]; więc powinno nazywać się inaczej. Dzięki.

Cytat(nospor @ 5.01.2023, 12:14:13 ) *
Nie powinno sie uzywac globalnie takich funkcji. Czasami, a w zadsadzie bardzo czesto, chcesz wkladac do bazy dokladnie to co user ci wpisal a nie wyfiltrowane. Filtrujesz tylko wtedy kiedy potrzeba. Takie globalne robienie wszystkiego to syf w kodzie.
Dobra, to jak zabiorę się za zczytywanie danych z formularzy i przetwarzanie ich to się zagłębie w temat, i pewnie pojawią się kolejne tematy w tej sprawie (IMG:style_emoticons/default/wink.gif)


Cytat(nospor @ 5.01.2023, 12:14:13 ) *
No i wlasnie masz zle. Kazda stronka powinna miec swoja konfiguracje, swoja domene/subdomene (jak to napisal viking) i jej katalog powinieni byc ustawony jako katalog startowy. Wowczas twoj URI zawsze wyglada tak samo

Fak, to o tym nawet nie wiedziałem. Nigdy sobie tym głowy nie zaprzątałem, bo w sumie nie uważałem nawet za potrzebne, skoro po moich stronkach latają tylko nieobeznani znajomi, lub ewentualnie to jakieś wizytówki small biznesów, bez formularzy nawet. Ale trzeba będzie to wszystko kiedys poprawić żeby było po bożemu.

Dzięki nospor i viking za pomoc.


EDIT: Z artykułu podanego przez Johnasa to jest ciekawe:

Wersja PHP 8.1 wprowadziła modyfikator readonly do właściwości klas. Wersja PHP 8.2 wprowadza ten modyfikator do oznaczenia klasy, dzięki czemu można skrócić zapis i nie oznaczać po kolei wszystkich właściwości klas jako readonly.
  1. class User
  2. {
  3. public function __construct(
  4. public readonly string $firstName,
  5. public readonly integer $status,
  6. public readonly DateTime $createdAt,
  7. ) {}
  8. }

Wersja w PHP 8.2 może wyglądać następująco:
  1. readonly class User
  2. {
  3. public function __construct(
  4. public string $firstName,
  5. public integer $status,
  6. public DateTime $createdAt,
  7. ) {}
  8. }


Ten post edytował sadistic_son 5.01.2023, 12:35:32
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: 14.10.2025 - 12:15