Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]namespace i use - Jak z tego korzystać?
Johnas
post 5.04.2022, 18:59:26
Post #1





Grupa: Zarejestrowani
Postów: 650
Pomógł: 16
Dołączył: 5.07.2010
Skąd: Ściśle Tajne

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


Witam, pisząc własny skrypt szkolę się z używania namespace i use, ale dostaje błędy że nie można znaleźć pliku... nie wiem jak z tego korzystać, czy mógłby ktoś to w prosty sposób opisać?

mam folder global i posiadam tam wszystkie klasy i kontrolery, ale nie wiem jak w global.php który nie jest klasą zaincludować te pliki przy użyciu use.. w root jaki powinien być namespace ? nie rozumiem tego... mam wielkie braki w programowaniu, które próbuje nadrobić, ale mi nie wychodzi sad.gif


--------------------
Jak coś jest dobre, to nie znaczy że nie może być to lepsze - Ideały nie istnieją ;D
Strony internetowe Świnoujście
Go to the top of the page
+Quote Post
ohm
post 5.04.2022, 19:35:52
Post #2





Grupa: Zarejestrowani
Postów: 619
Pomógł: 143
Dołączył: 22.12.2010

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


Najszybciej i najprościej jest wykorzystać composer i autoloader: https://thewebtier.com/php/psr4-autoloading...using-composer/
a jeśli chcesz to PHPowo zrobić, to musisz trzymać się PSR4: https://github.com/php-fig/fig-standards/bl...der-examples.md
Go to the top of the page
+Quote Post
Johnas
post 6.04.2022, 00:57:40
Post #3





Grupa: Zarejestrowani
Postów: 650
Pomógł: 16
Dołączył: 5.07.2010
Skąd: Ściśle Tajne

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


a jakie są zalety zastosowania tego, bo w ogóle nie orientuje się w temacie... Tymczasowo próbuję tworzyć modele... tak samo nie potrafię zrozumieć czym się różni implementacja od expandsa oraz co dają abstrakcje w klasach... Mam duże braki w programowaniu i to jest smutne sad.gif


--------------------
Jak coś jest dobre, to nie znaczy że nie może być to lepsze - Ideały nie istnieją ;D
Strony internetowe Świnoujście
Go to the top of the page
+Quote Post
ohm
post 6.04.2022, 07:25:22
Post #4





Grupa: Zarejestrowani
Postów: 619
Pomógł: 143
Dołączył: 22.12.2010

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


Ogólnie namespace'y dają mocne uproszczenie i ułożenie struktury plików i logiki w projekcie. Dużo wygodniej się tworzy projekt używając namespace i use niż zabawy z include (każdy wie czym to się zazwyczaj kończyło wink.gif )
Jeśli chcesz nauczyć się podstaw używania takich rzeczy, to najlepiej zacząć sobie jakiś kurs PHP z frameworkiem typu symfony czy laravel (ważne żeby był nowy i trzymal się PSR), nie ma co się smucić brakami, po to powstało tyle kursów programowania żeby można było się wszystkiego nauczyć wink.gif każdy z nas tu zaczynał więc każdy wie jak to jest nie rozumieć 3/4 rzeczy które po pewnym czasie stawały się banalne.

http://www.php.pl/Wortal/Artykuly/PHP/Pods...poczatkujacych5
http://www.php.pl/Wortal/Artykuly/PHP/Pods...-poczatkujacych
http://www.php.pl/Wortal/Artykuly/PHP/Pods...zestrzenie-nazw

Może nie są to jakieś świeże artykuły ale może nieco wyjaśnią koncepcje.
Go to the top of the page
+Quote Post
Johnas
post 8.04.2022, 21:40:44
Post #5





Grupa: Zarejestrowani
Postów: 650
Pomógł: 16
Dołączył: 5.07.2010
Skąd: Ściśle Tajne

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


Dobrze, to powiem inaczej

mam plik a i w nim

  1. class A {
  2. public $mysql
  3. function __construct() {
  4. $this->mysql = Połaczenie z baza danych;
  5. $b = new B();
  6. }
  7. }


oraz klase B gdzie potrzebuje uzyc połączenia z mysql z klasy A ale jeżęli próbuje dodać klase b do klasy a to nie widzi połączenia.. nie wiem czy implementować klasę czy co z nią zrobić... nie rozumiem tego

nie rozumiem jak to połączyć funkcja jednej jest potrzebna w konstrukcji drugiej i tak samo jest na odwrót ?


--------------------
Jak coś jest dobre, to nie znaczy że nie może być to lepsze - Ideały nie istnieją ;D
Strony internetowe Świnoujście
Go to the top of the page
+Quote Post
aras785
post 8.04.2022, 21:44:53
Post #6





Grupa: Zarejestrowani
Postów: 859
Pomógł: 177
Dołączył: 29.10.2009

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


Jeśli chodzi o bazy to chyba singleton najczęściej jest używany, tutaj jakiś przykład: https://phpenthusiast.com/blog/the-singleto...-pattern-in-php.

Konkretny kod wrzucaj tutaj: https://onecompiler.com/php - będzie łatwiej bo kurde nie ogarniam tego ostatniego przykładu... może wystarczy w klasie B wstrzyknąć właśnie to połączenie mysql? (__construct($mysql)) - brakuje tutaj typowania sad.gif
Go to the top of the page
+Quote Post
Johnas
post 8.04.2022, 21:49:48
Post #7





Grupa: Zarejestrowani
Postów: 650
Pomógł: 16
Dołączył: 5.07.2010
Skąd: Ściśle Tajne

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


już tłumaczę o co mi chodzi. Mam klasę Engine gdzie jest wszystko ładowane między innymi połączenie z bazą danych oraz mam klasę Configuration która pobiera konfiguracje:

  1. <?php
  2.  
  3. class Configuration
  4. {
  5. /** @var id */
  6. public $id;
  7.  
  8. /** @var key */
  9. public $key;
  10.  
  11. /** @var value */
  12. public $value;
  13.  
  14. /** @var array */
  15. public $configuration = array();
  16.  
  17. /** Constructor */
  18. public function __construct($key = null) {
  19. global $engine;
  20. if ($key == null) {
  21.  
  22. $array = $engine->mysql->get($engine->prefix."config");
  23.  
  24. foreach ($array as $data) {
  25. $this->configuration[$data["name"]] = $data["value"];
  26. }
  27.  
  28. return $this->configuration;
  29. } else {
  30. return $this->getValueByKey($key);
  31. }
  32.  
  33. }
  34.  
  35. /**
  36.   * @param id $id
  37.   */
  38. public function setId(id $id): void
  39. {
  40. $this->id = $id;
  41. }
  42.  
  43. /**
  44.   * @return id
  45.   */
  46. public function getId(): id
  47. {
  48. return $this->id;
  49. }
  50.  
  51. /**
  52.   * @return key
  53.   */
  54. public function getKey(): key
  55. {
  56. return $this->key;
  57. }
  58.  
  59. /**
  60.   * @param key $key
  61.   */
  62. public function setKey(key $key): void
  63. {
  64. $this->key = $key;
  65. }
  66.  
  67. /**
  68.   * @return value
  69.   */
  70. public function getValue(): value
  71. {
  72. return $this->value;
  73. }
  74.  
  75. /**
  76.   * @param value $value
  77.   */
  78. public function setValue(value $value): void
  79. {
  80. $this->value = $value;
  81. }
  82.  
  83. public function save() {
  84. global $engine;
  85.  
  86. $data = array("name" => $this->key,
  87. "value" => $this->value);
  88. if ($this->getValueByKey($this->key)) {
  89. $engine->mysql->where("name", $this->key);
  90. $id = $engine->mysql->update($engine->prefix."config", $data);
  91. } else {
  92.  
  93. $id = $engine->mysql->insert($engine->prefix."config", $data);
  94. }
  95.  
  96. if (isset($id) && $id > 0)
  97. return true;
  98. else
  99. return false;
  100. }
  101.  
  102. /**
  103.   * @param key $key
  104.   */
  105. public function getValueByKey($key)
  106. {
  107. global $engine;
  108.  
  109. $engine->mysql->where("name", $key);
  110. $ret = $engine->mysql->getOne($engine->prefix."config");
  111.  
  112. $this->id = $ret["id"];
  113. $this->key = $ret["name"];
  114. $this->value = $ret["value"];
  115. if (isset($this->id) && $this->id > 0)
  116. return true;
  117. else
  118. return false;
  119. }
  120. }


Potrzebuje pobrać konfigurację z bazy danych w konstrukcji Engine, ale bez konstrukcji Engine klasa Configuration nie ma danych o mysql bo znajduje się ona w Engine i teraz nie wiem jak to ze sobą połączyć... czy jest nawet taka możliwość


--------------------
Jak coś jest dobre, to nie znaczy że nie może być to lepsze - Ideały nie istnieją ;D
Strony internetowe Świnoujście
Go to the top of the page
+Quote Post
aras785
post 9.04.2022, 17:51:14
Post #8





Grupa: Zarejestrowani
Postów: 859
Pomógł: 177
Dołączył: 29.10.2009

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


Cześć,

powiedz czym jest Engine - jest to silnik bazy danych czy taki Core systemu?
Rozumiem, że klasa Configuration to obsługa jakieś tabeli bazy danych niż config systemowy?

Jeśli chcesz mieć dostęp z każdego miejsca do konfiguracji to dodajesz do klasy Engine set/getConfiguration i po prostu wrzucasz to gdzieś w kernelu lub robisz jakiś singleton który będzie miał dostęp zawartości w każdym miejscu.
Jak lepiej to opiszesz to zrobię jakiś przykładowy kod smile.gif
Go to the top of the page
+Quote Post
ohm
post 9.04.2022, 18:32:16
Post #9





Grupa: Zarejestrowani
Postów: 619
Pomógł: 143
Dołączył: 22.12.2010

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


Możesz także wykorzystać Dependancy Injection - https://designpatternsphp.readthedocs.io/pl...ion/README.html - akurat przykład powiązany mniej więcej z tym co chcesz zrobić smile.gif

+ https://php-di.org/doc/getting-started.html - po przejrzeniu tego wydaje mi się że załapiesz o co chodzi,

i jeszcze jedno: https://symfonycasts.com/screencast/depende...injection/intro


Tyle że jak widzisz, wymaga to poznania autoloadera + composera o których pisałem wyżej

Ten post edytował ohm 9.04.2022, 18:38:27
Go to the top of the page
+Quote Post
Johnas
post 19.04.2022, 16:44:40
Post #10





Grupa: Zarejestrowani
Postów: 650
Pomógł: 16
Dołączył: 5.07.2010
Skąd: Ściśle Tajne

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


Engine to klasa silnika która zawiera połączenie z bazą danych, system szablonów i takie tam elementy.
Klasa Configuration to obsługa konfigu z bazy danych... tak się składa że w pliku config mam tylko połączenie z bazą danych, a reszta jest pobierana z niej w momencie połączenia... Problem polegał na tym ze w Engine trzeba było załadować konfigurację, a w konfiguracji silnik do połączenia się z bazą danych tongue.gif skomplikowałem to, wiem... Rozwiązaniem było danie parametru this jako engine podczas includowania konfiguracji :

przykład
  1. $configuration = new Configuration($this);


i zrezygnować z global $engine


--------------------
Jak coś jest dobre, to nie znaczy że nie może być to lepsze - Ideały nie istnieją ;D
Strony internetowe Świnoujście
Go to the top of the page
+Quote Post
etet100
post 24.04.2022, 20:38:06
Post #11





Grupa: Zarejestrowani
Postów: 3
Pomógł: 1
Dołączył: 22.04.2022

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


Pierwszy wpis zawiera błędną tezę, że przestrzenie nazw i autoloading to to samo. To są odrębne mechanizmy.
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 27.04.2024 - 21:41