Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl


Xelah
Napisane: 16.09.2015, 07:13:34





Grupa: Zarejestrowani
Postów: 139
Dołączył: 12.05.2013
Skąd: Hamburg

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

A możesz wyjaśnić co robi PHP_EOL przy dodawaniu do archiwum?
  Forum: Przedszkole · Podgląd postu: #1171181 · Odpowiedzi: 2 · Wyświetleń: 307

Xelah
Napisane: 26.07.2015, 20:11:42





Grupa: Zarejestrowani
Postów: 139
Dołączył: 12.05.2013
Skąd: Hamburg

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

Pewnie zaraz mi się oberwie, ale trudno smile.gif

Ja bym proponował w ogóle zacząć od początku. Twoje rozwiązanie jest kiepskie - jego fatalne. Na prawdę z tego niczego sensownego nie ulepicie. Pojawiają się jakieś klasy, ale to z OOP nie ma nic wspólnego. W obu przypadkach jest to coś, co wygląda na kod pisany przez kogoś pomiędzy średnim juniorem a kiepskim mid-level. A do tego to, co już napisał Damonsson - to nie jest framework. To jest CMS. Kompletnie dwa tematy. Można CMS oprzeć na frameworku, ale sam w sobie CMS nie jest i nie będzie frameworkiem.

Biorąc pod uwagę, że nie masz za bardzo wyjścia (jesteś nowy i nie masz odpowiedniego autorytetu/siły przebicia), to proponuję już szukać innej pracy. W tej nie nauczysz się kompletnie niczego dobrego, a Twój współpracownik będzie Cię ciągnął w dół.

Uciekaj. Najszybciej jak się da. I nie martw się, co powiesz kolejnemu pracodawcy. Uwież mi, że każdy rozsądnie myślący przedsiębiorca w 100% zrozumie Twoje zachowanie. A jeśli nie, to znaczy, że sam stosuje dokładnie takie same praktyki i lepiej Ci będzie gdzie indziej.

Ja to już przerabiałem. Nie licz na to, że coś się zmieni i będzie lepiej. Nie będzie. A ty tylko stracisz czas i nerwy. Nie warto.
  Forum: Hydepark · Podgląd postu: #1166230 · Odpowiedzi: 23 · Wyświetleń: 1 936

Xelah
Napisane: 13.07.2015, 20:23:37





Grupa: Zarejestrowani
Postów: 139
Dołączył: 12.05.2013
Skąd: Hamburg

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

Kodowanie pliku nie ma za dużo wspólnego z metodą porównywania w bazie. Plik jest w UTF-8. To jest właśnie kodowanie. Nazwa "Unicode" to tylko definicja każdego możliwego znaku (bez względu na użyte kodowanie). W przypadku kodowania UTF-8 jeden znak będzie reprezentowany na co najmniej 8 bitach, w URF-16 na 16 itd.

Żeby to bardziej uprościć, można powiedzieć, że UTF-8 czy UCS2 to sposób zapisu tak zwanych "code points" definiowanych w Unicode.

W ten sposób działa kodowanie w pliku.

To, o czym Ty wspomniałeś (utf8_general_ci i utf8_unicode_ci) to tylko metoda, jakiej używa baza do porównania znaków (mniejszy, większy, równy) zapisanych, w tym przypadku, w UTF-8. general_ci jest dosyć prymitywny i ma sporo problemów z niektórymi skryptami. unicode_ci z kolei o radzi sobie o wiele lepiej.

Tutaj masz obie metody:
http://collation-charts.org/mysql60/mysql6...i.european.html
http://collation-charts.org/mysql60/mysql6...i.european.html


To ma znaczenie przy wyszukiwaniu w bazie i sortowaniu. Ale nie ma kompletnie niczego wspólnego z UTF-8 o którym mowa w kodowaniu znaków w pliku. I baza i plik mają UTF-8. To jest jedyna istotna informacja.

Wybór metody porównywania znaków jest zależny tylko i wyłącznie od Twoich konkretnych potrzeb.
  Forum: Przedszkole · Podgląd postu: #1164925 · Odpowiedzi: 10 · Wyświetleń: 423

Xelah
Napisane: 13.07.2015, 14:08:44





Grupa: Zarejestrowani
Postów: 139
Dołączył: 12.05.2013
Skąd: Hamburg

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

Nie wiem jak to jest w MSSQL, ale PostgreSQL ma coś podobnego do MySQL (oczywiście nie dokładnie to samo, ale zbliżone):

Ustaw na serwerze bazę na UNICODE. Potem w kliencie zrób:

  1. SET CLIENT_ENCODING TO 'LATIN1';


i nasępnie select z bazy UNICODE.

PostgreSQL po prostu robi konwersję on-the-fly z server encoding do client encoding. MySQL zwraca krzaki po prostu obetnie to, czego nie potrafi zrozumieć, albo zapoda z krzaków jeśli kodowania są źle ustawione. A PostgreSQL wali błędem (jeśli nie znajdzie mapowania do, w tym przypadku, LATIN1).

Więcej na ten temat jest tutaj:

http://www.postgresql.org/docs/9.4/static/multibyte.html

Bezsprzecznie PostgreSQL radzi sobie tutaj o niebo lepiej i jego zachowanie jest bardziej logiczne niż MySQL-a.
  Forum: Przedszkole · Podgląd postu: #1164896 · Odpowiedzi: 10 · Wyświetleń: 423

Xelah
Napisane: 13.07.2015, 12:57:09





Grupa: Zarejestrowani
Postów: 139
Dołączył: 12.05.2013
Skąd: Hamburg

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

To może bardziej łopatologicznie.

Klient wysyła zapytanie do serwera. Serwer nie może się domyślić jakie jest użyte kodowanie z zapytaniu więc tą informacje bierze albo z konfiguracji albo od klienta.
Przykład:

  1. SELECT * FROM tabel1 WHERE some_field="字編碼";


Jeśli klient nie powie serwerowi, że to jest UTF-8 a domyślnie serwer jest ustawiony na ASCII, to nawet jak pole some_field ma "字編碼" to i tak serwer nic nie znajdzie, bo nie dostanie "字編碼" tylko krzaki.

To samo dzieje się, kiedy serwer wyciąga dane z bazy. Kolumna jest UTF-8 no i serwer wyciąga w UTF-8. Teraz musi to wysłać do klienta. Jeśli domyślna konfiguracja to ASCII, to masz ten sam problem co wyżej. Dlatego albo ustawiasz to w plikach konfiguracyjnych albo musisz to zmienić live albo poprzez SET NAMES albo bezpośrednio przez API: mysqli::set_charset (lepsze i szybsze rozwiązanie niż SET NAMES).
  Forum: Przedszkole · Podgląd postu: #1164890 · Odpowiedzi: 10 · Wyświetleń: 423

Xelah
Napisane: 13.07.2015, 07:25:36





Grupa: Zarejestrowani
Postów: 139
Dołączył: 12.05.2013
Skąd: Hamburg

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

To jest nieco bardziej skomplikowane niż com to przedstaił ;)

Chodzi o to, że domyślnie MySQL na styku klient-serwer spodziewa się ASCII. Jeśli domyślna konfiguracja nie została zmieniona, to oczywiście serwer poda UTF-8 (bo tak jest w bazie) ale klient i tak dostanie ASCII, bo tak jest skonfigurowany on i połączenie do serwera. Plik z kodem źródłowym czy kodowanie bazy nie mają tu nic do rzeczy.
Problem jest właśnie na styku klient-serwer.

Tutaj masz więcej na ten temat:
http://dev.mysql.com/doc/refman/5.0/en/cha...connection.html
  Forum: Przedszkole · Podgląd postu: #1164852 · Odpowiedzi: 10 · Wyświetleń: 423

Xelah
Napisane: 30.06.2015, 17:37:07





Grupa: Zarejestrowani
Postów: 139
Dołączył: 12.05.2013
Skąd: Hamburg

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

Bo tekst jest w Windows-1250 a nie w ISO.
  Forum: Przedszkole · Podgląd postu: #1163558 · Odpowiedzi: 2 · Wyświetleń: 155

Xelah
Napisane: 25.06.2015, 07:59:46





Grupa: Zarejestrowani
Postów: 139
Dołączył: 12.05.2013
Skąd: Hamburg

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

  1. preg_match('/^[a-zA-Z0-9]+$/', $name);


Bo Twoje wyrażenie pozwala tylko na jeden znak w nazwie użytkownika. Możesz to tez ograniczyć, albo w samym wyrażeniu

  1. preg_match('/^[a-zA-Z0-9]{3,10}$/', $name);


albo jeszcze na etapie sprawdzania długości nazwy użytkownika.
  Forum: PHP · Podgląd postu: #1163015 · Odpowiedzi: 7 · Wyświetleń: 362

Xelah
Napisane: 29.06.2015, 20:00:39





Grupa: Zarejestrowani
Postów: 139
Dołączył: 12.05.2013
Skąd: Hamburg

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

IMO to co zrobiłeś w ogóle nie ma sensu. Testujesz tablicę, którą sam utworzyłeś na potrzeby testu. Co dokładnie Ci to daje? Nic. Masz przetestować kod, który napisałeś a nie sam test.

Abstrachując od tego, czy sam kod ma ręce i nogi (a niestety nie ma), to sprawdzasz wyjście funkcji na podstawie wejścia.

  1. public function testReturnsCorrectOutput()
  2. {
  3. $request = [...]
  4. $route = [...]
  5. $controller = new PageController();
  6.  
  7. $expectedOutput = '....';
  8. $actualOutput = $controller->init($route, $request);
  9.  
  10. $this->assertSame($expectedOutput, $actualOutput);
  11.  
  12. // Jeśli na wyjściu spodziewasz się istniejącej klasy
  13. $this->assertTrue(class_exists($actualOutput));
  14. }


Jeśli chcesz przetestować czy zachowanie jest prawidłowe jeśli na wejściu jest dostaniesz nieprawidłowe dane to robisz to dokładnie w ten sam sposób. Generalnie Twoje testy idą w złym kierunku.

Nie wspominając już o fakcie, że sam kod pozostawia wiele do życzenia. Dla przykładu przekazujesz do funkcji dwie tablice a potem się martwisz, czy mają w środku to, co trzeba. Nie prościej przekazać dwa obiekty? Route i Request? Wtedy masz pewność, że na pewno jest tam to, co chcesz. Typy prymitywne można czasami przekazywać jako parametry do konstruktora, ale w tym przypadku nie ma najmniejszego uzasadnienia, żeby przekazywać tablicę.
Wtedy Twój kod będzie o wiele prostszy, czytelniejszy i łatwiejszy do przetestowania.

Generalnie jedna ważna uwaga. Jeśli nie jesteś w stanie czegoś przetestować, albo nie masz pojęcia jak to zrobić, to zazwyczaj wyraźny znak, że z Twoim kodem jest coś nie tak i należy przemyśleć czy nie należałoby go zmienić.
  Forum: PHP · Podgląd postu: #1163470 · Odpowiedzi: 18 · Wyświetleń: 1 808

Xelah
Napisane: 28.06.2015, 20:12:22





Grupa: Zarejestrowani
Postów: 139
Dołączył: 12.05.2013
Skąd: Hamburg

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

Odnoszę wrażenie, że zupełnie inaczej widzimy temat unit i ogólnie testów.

Dla mnie coverage to bardzo istotna sprawa. Właśnie po to, żeby sprawdzić, czy kod który mam nie jest martwy i czy aby nie ma tam jakiegoś poważnego kuku. I tylko tyle. Oczywiście, że to nie ma znaczenia "sensu stricto", ale daje jeśli trzymasz się zasady, że cocerage jest tylko klasy ktrórą testujesz (a testuje zawsze wyłącznie jedną klasę), to łatwo sprawdzić, czy każda linijka kodu ma żyje i ma się dobrze. To, czy produkuje prawidłowy output to już problem testów i nie ma nic wspólnego z coverage.
I w pełni się zgodzę, że code-coverage sam w sobie nic nie znaczy. Fakt, że każda linijka kodu jest wykonana nie znaczy że nie ma problemu, albo, że kod działa prawidłowo. Bo to nie jest cel code-coverage.

Jeśli chodzi o API, to tak, mówię tutaj o metodach publicznych. Bez znaczenia jest czy metoda publiczna jest definiowana przez interfejs czy nie. Jeśli jest publiczna to staje się automatycznie częścią API (Bardzo dobrze widać to we frameworkach, które ze względu na BC utrzymują API, które czasami powoduje palpitacje od samego patrzenia).
I uważam, że najważniejsze są tylko metody publiczne, bo to je możemy dowolnie wywoływać i to one muszą dla danego wejścia produkować spodziewany wyjście. Metody prywatne takiej miżliwości nie mają. Nie mogę ich dowolnie wywoływać z dowonlymi parametrami i w dowolny sposób. Bo o tym czy i jak będą wykonane decuduje publiczne API.
Jedyne, co akceptuję w przypadku metod prywatnych to sprawdzanie, co weszło do mock-a (na przykład expects()->method()->with() w PHPUnit). Bo to rzeczywiście może być ważne, biorąc pod uwagę, że obiekt jest mockowany i przyjmuję, że zadziała, o ile na wejściu dostanie to co trzeba. Jak nie, to problem wykryję najwcześniej na poziomie testów funkcjonalnych.

Co do ścieżek wykonania to chyba ja tym razem byłem nie wyraziłem się jasno. Moim zdaniem nie chodzi o to, żeby testować każdy możliwy input, po to, żeby sprawdzić każdy możliwy output. Nawet każdy poradnik odnośnie testów na wstępie mówi jedno: Zawsze możesz napisać więcej testów. Testy mają za zadanie sprawdzić, czy jeśli podamy prawidłowy input to dostaniemy spodziewany output.
I co najważniejsze - testy nie sprawdzają, czy kod nie ma błędów. Od tego są testy funkcjonalne. Testy jednostkowe, IMO, pozwalają na szybszy i prostszy design danego komponentu (TDD). Fakt, że jeśli mamy błąd to powinniśmy napisać test, który nie przejdzie, a potem naprawić kod - to zupełnie inna bajka.
Podają taki bardziej hardcorowy przykład. Wyobraź sobie, że dostajesz na wejściu string. W środku następuje rozbicie go na pojedyńcze wyświetlalne znaki. Czyli co, mam napisać testy dla każdej możliwej kombinacji znaków, żeby sprawdzić czy działa? Oczywiście, że nie. Mogę sprawdzić wartości brzegowe, ewidentnie zły input (np. int zamiast string) i jeden zwykły input. Inaczej szybko przejdziemy od pisania szybkich testów do pisania tysięcy testów pod jedną klasę, bo przecież można na wejściu podać cokolwiek i trzeba sprawdzić czy zawsze zadziała. IMO to nie o to chodzi. Sprawdzić trzeba jedną wartość spodziewaną i warunki brzegowe. A odatkowe testy zawsze można dopisać później, jeśli zajdzie taka potrzeba.

Apropos sensu testów metod prywatnych. Kilka miesięcy temu dyskutowaliśmy to podczas code-review i zadaliśmy to pytanie Sebastianowi Bergmann-owi. Pokierował nas prosto do swojego posta z przed 5 lat:
https://sebastian-bergmann.de/archives/881-...r-Privates.html

Dwa ostatnie akapity podsumowują temat dosyć dobrze.

I ja też jestem zdania, że metody prywatne można testować wyłącznie w bardzo specyficznych przypadkach. Zazwyczaj jednak nie ma takiej potrzeby.
  Forum: PHP · Podgląd postu: #1163402 · Odpowiedzi: 18 · Wyświetleń: 1 808

Xelah
Napisane: 25.06.2015, 07:16:36





Grupa: Zarejestrowani
Postów: 139
Dołączył: 12.05.2013
Skąd: Hamburg

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

Pozwolę sobie dodać jeszcze kilka rzeczy od siebie, bo nie do końca zgodze się z Crozin-em, że nie należy się przejmowac code-coverage.

Powinieneś się tym przejmować. Z bardzo prostego powodu. Jeśli nie potrafisz przetestować klasy w ten sposób, że każda jej prywatna i chroniona metoda zostanie wywołana i wykonasz każdą linijkę kodu, to znaczy tylko jedno - kod jest martwy i możesz go usunąć bez szkody dla funkcjonalności.
Opcja druga jest taka, że masz problem z architekturą kodu. Jeśli jesteś pewny, że dany fragment da się jakoś wykonać, ale jest to niezmierne skomplikowane, to należy przemyślec architekturę tego fragmentu.
Generalnie powinieneś dążyć do 100% code-coverage. To w sumie jest banalne i nie dasz rady tego osiągnąć tylko w bardzo specyficznych przypadkach i tylko na takiej czy innej maszynie, która robi build i odpala testy.

Za to w 100% zgodzę się z przedmówcą, że testowac powinieneś tylko metody publiczne, bo to one stanowią interfejs API. Reszta to detal implmentacji i testów w ogóle nie powinno obchodzić co się tam dzieje. Ważne, żeby pbliczne API działało, bo tylko do niego masz dostep.

Jedyna sytuacja, w której możesz pokusić się o testowanie protected czy private to przypadki klas abstrakcyjnych. W takim przypadku masz do wyboru kilka opcji:
1. Testujesz bezpośrednio na klasie z użyciem Closure
2. Robisz testową klasę, która rozszerza abstrakcję i tam testujesz czy wszystko się zachowuje jak należy.
3. Robisz to bezpośrednio w testach wszystkich klas rozszeżających abstrakcję.

Trzecia opcja jest najmniej efektywna jeśli masz sporo klas dziedziczących. Sporo duplikacji tych samych testów.

Możesz też nie pokrywać testami tej klasy w ogóle, wychodząc z założenia, że jeśli klasa dziedzicząca działa, to jest OK. Ale to raczej jest ryzykowne i może spokojnie prowadzić do problemów, ale zastawiania martwego kodu, który nie jest używany.

No jeszcze muszę się nie zgodzić z Pyton_000-em. Metod prywatnych i chronionych jak najwięcej. Publiczne tylko wtedy, kiedy je potrzebujesz. Jeśli nie masz use-case-a, który uzasadnie istnienie metody publicznej to jej nie piszesz.
  Forum: PHP · Podgląd postu: #1163004 · Odpowiedzi: 18 · Wyświetleń: 1 808

Xelah
Napisane: 19.06.2015, 07:21:27





Grupa: Zarejestrowani
Postów: 139
Dołączył: 12.05.2013
Skąd: Hamburg

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

Może to powiązane?

http://serverfault.com/a/634895
  Forum: Serwery WWW · Podgląd postu: #1162077 · Odpowiedzi: 3 · Wyświetleń: 637

Xelah
Napisane: 17.06.2015, 14:18:40





Grupa: Zarejestrowani
Postów: 139
Dołączył: 12.05.2013
Skąd: Hamburg

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

To, że widzisz pliki niczego nie zmienia. Jeśli dysk jest uszkodzony i sektory masowo ummierają ale mapa plików nie jest uszkodzona w newraligicznych punktach to dalej "coś" będzie działać. Ale jak system będzie probował czytać czy wykonywać to czy inne polecenie a w środku masz padnięte sektory, to i tak się będzie wysypywał w dziwny sposób. RAID też nie zawsze pomaga. Tym bardzie najprostszy RAID0.

Jeśli nie masz jakiegoś recovery mode to raczej bez kontaktu z serwerownią sie nie objedzie.
  Forum: Serwery WWW · Podgląd postu: #1161849 · Odpowiedzi: 12 · Wyświetleń: 1 406

Xelah
Napisane: 16.06.2015, 20:23:40





Grupa: Zarejestrowani
Postów: 139
Dołączył: 12.05.2013
Skąd: Hamburg

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

Cytat(konrados @ 16.06.2015, 15:54:05 ) *
Chcemy użyć zewnętrznego modułu, np. Blog, i oprócz skopiowania po prostu paru plików (kontrolery, widoki) to musimy jeszcze bawić się w routy. Do tego, gdy ten blog będzie zaktualizowany, to musimy te routy też zaktualizować. I wciąż nie wiem jakim cudem te zalety skomplikowania routów w Laravelu "wygrywają" z podejściem Codeigniterowym...


Tak jak napisałem wcześniej - wprowadzanie konwencji do aplikacji. Aplikacja (a wszczególności routing) nie powinny działać na zasadzie konwencji. To jest hard-coupling pomiędzy strukturą folderów, nazwami plików, klas i metod. To jest czyste zło. Kontorler powinien być niezależny, a nie wymuszony przez konwencję. Nie wiem, jak to działa w CI, bo pracowałem z nim raz i to jakieś 5 lat temu, więc najzwyczajniej w świecie nie wiem, jak to działa w obecnej wersji.
Jeśli już mówisz o kopiowaniu gdzieś całego modułu, to jego częścią powinien być routing. I wtedy dalej nie musiłbyś się martwić. Jeśli nie jest, to jest to tylko i wyłącznie wina architektury albo CI albo tego modułu. Jeśli pozwalają na reuse to routing powinien być jego integralną częścią. Wtedy problem po prostu nie istnieje.
Tak to mniej więcej wygląda w bundlach Symfony. Jeśli bundel potrzebuje routingu, to jest on jego integralną częścią i nie musisz się o niego martwić używając go w tym czy innym miejscu.

Cytat(konrados @ 16.06.2015, 15:54:05 ) *
No chyba wiem co to jest REST - requesty HTTP mają swoje metody, jak właśnie GET czy POST oraz jakieś tam dane - i my działamy zgodnie z tą metodą i danymi, no chyba do tego to się sprowadza, tak?


Miej więcej smile.gif
https://en.wikipedia.org/wiki/Representatio..._state_transfer

Cytat(konrados @ 16.06.2015, 15:54:05 ) *
W takim razie, co takiego mają te nowe frameworki (jak np. Laravel), że chwalą się, że są "RESTful"?


Ja bym strzelał, że jedyne, co je rzeczywiście wyróżnia, to dobry marketing biggrin.gif
Silex jest bardzo prostym frameworkiem i można by pokusić się o stwierdzenie, że nie jest tak napompowany jak Symfony czy Zend. A przez to lepiej się nadaje do API, bo potrafi teoretycznie obsłużyć więcej requestów. Reszty nie znam, więc nie będę się wypowiadał.

Generalnie nie ma większej różnicy jaki framework wybierzesz. REST-ową aplikację możesz zrobić zawsze. Całkiem możliwe, że łatwiej będzie to zrobić w tym czy innym frameworku ze względu na jego budowę, ale to już są raczej detale. Request i response to ułamek (dosłownie) tego, co zazwyczaj się dzieje pomiędzy request-em a response. Najważniejszy jest model domeny. Potem będzie (zazwyczaj) persistance (nie ważne czy baza czy coś innego). To stanowi jakieś 99,9% całego API.


A najlepszy framework do REST-a możesz sobie zawsze napisać sam. Wtedy będzie najoptymalniejszy wydajnościowo i bez jednego zbędnego wodotrysku smile.gif Nam to zajęło w sumie 4 dni (dwie osoby). Mamy własny kod i używamy komponentu walidacji z Symfony i mamy adapter do obiektu Request z Symfony, żeby uniezależnić się do konkretnej implementacji i mieć tylko to, czego potrzebujemy. Reszta to kod własny: Response, rendering, obsługa błędów, routing i kontrolery (na zasadzie CQRS). Testowy czas wykonania pojedyńczego requestu typu hello world (z walidacją requestu i jakąś banalną logiką) to całe 4ms-6ms. Dupy nie urywa, ale do REST wystarczy smile.gif
Tylko pytanie czy czujesz się na siłach pisać wszystko od podstaw samemu smile.gif
  Forum: Przedszkole · Podgląd postu: #1161776 · Odpowiedzi: 7 · Wyświetleń: 689

Xelah
Napisane: 16.06.2015, 07:16:42





Grupa: Zarejestrowani
Postów: 139
Dołączył: 12.05.2013
Skąd: Hamburg

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

Zacząć należało by od tego, że REST nie ma nic wspólnego z tym, czy masz domyślne routowanie czy nie. Poczytaj co to jest REST. To nie routing smile.gif

O powody takiego, a nie innego podejścia zapytać musisz twórców frameworka. Ale mogę tylko zgadywać, że to jest bardziej kwestia bezpieczeństwa. Ponieważ routing w przypadku CI działa na zasadzie konwencji łatwiej jest o dostęp do nieodpowiednich kontolerów. Poza tym może być jeszcze kwestia przejrzystości. Jeśli każdy routing mam zdefiniowany, to łatwiej się do niego odnieść w innej części kodu. Jeśli wszystko jest robione na zasadzie konwencji, to musisz zawsze samemu pamiętać, jak URL ma wyglądać, żeby się dostać do danego kontrolera. Ewentualna modyfikacja jest prostsza, bo masz kontoroler identyfikowany po nazwie a nie strukturze katalogów czy innej konwencji. Konwencja to IMHO magia i powinno się jej unikać jak ognia. No chyba, że nie ma za bardzo innego wyjścia albo można przy użyciu solidnych argumentów ją umotywować .

A o szczegóły takiej a nie innej decyzji polecam zapytać twórców, oni to na pewno wyjaśnią najlepiej.
  Forum: Przedszkole · Podgląd postu: #1161678 · Odpowiedzi: 7 · Wyświetleń: 689

Xelah
Napisane: 12.06.2015, 17:18:32





Grupa: Zarejestrowani
Postów: 139
Dołączył: 12.05.2013
Skąd: Hamburg

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

Ja osobiście polecałbym jednak OOP. Nie żeby procedural nie miał swoich zalet, ale mimo wszystko jednak OOP jest w PHP lepszym pomysłem.

Poczytaj sobie na przykład to:
http://www.phptherightway.com/

Zapoznaj się też dokładnie z dokumentacją PHP odnośnie OOP. Nie chodzi o nauczenie się jej na pamięć, ale o przeczytanie tego, co tam jest. Tak, żebyś miał ogólne pojęcie co jest dostępne i w razie problemów wiedział gdzie w pierwszej kolejności uderzyć po pomoc.

Skoro dopiero zaczynasz to na pewno dobrą radą będzie od razu zapoznać się z TDD i PHPUnit (https://phpunit.de/). Nie mówię tutaj o trzymaniu się TDD w 100% (czyli najpierw test a potem kod). Moższ napisać najpierw klasę albo dwie, ale od razu po tym musisz napisać testy. Jeśli będziesz się tego trzymał, to pewne rzeczy przyjdą Ci łatwiej, bo testy wymuszają na programiście pewne sposoby stosowania OOP, bez których test jest albo niemożliwy, albo do tego stopnia trudny, że już sam ten fakt daje do myślenia i kończy się refactoringiem.

Poczytaj o SOLID (na przykład tutaj: http://code.tutsplus.com/tutorials/solid-p...ple--net-36074). To jedna z podstawowych rzeczy, którą musisz znać.

I na pewno nie zaczynaj od frameworków. Bo jedyne, czego się nauczysz, to jak się coś robi w tym czy innym frameworku, a nie ja się w ogóle to robi. Jak popatrzysz na dokumentację choćby Symfony, to zobaczysz, że podane tam przykłady są często po prostu używaniem obiektów a nie programowaniem obiektowym. A i sam framework w wielu miejscach łamie SOLID (chociaż wcale nie musiał).
Nie chodzi o to, że framework to zło. Symfony jest na prawdę świetnym frameworkiem, ale jak się chcesz nauczyć programować to najpierw poznaj teorię i praktykę, a dopiero później decyduj czy (jeśli w ogóle) i jakiego frameworka używać.

Poszukaj w księgarni książek Robert-a C. Martin-a. Nie są o PHP ale zawarte tam wzorce i przykłady można w większości przypadków przenieść 1:1 do PHP.

Wybierz sobie jakiś projekt, który chciałbyś zrobić i zaczynaj. W tym samym czasie czytaj i pytaj jak nie jesteś czegoś pewien. Masz stack overflow, gdzie spokojnie znajdziesz doświadczonych ludzi, którzy Ci pomogą (Możesz też pytać tutaj, ale po niektórych odpowiedziach na tym forum mniemam, że nie dowiesz się niczego wartościowego).


Cytat(rad11 @ 12.06.2015, 17:06:39 ) *
...W praktyczny sposob w dzisiejszych czasach uzywa sie tego przy pomocy Frameworkow ale nic nie stoi na przeszkodzie aby pisac samemu klasy itd...

...i potem frameworki...


Chciałem coś mądrego napisać, ale że gorąco i nie chce mi się już myśleć to napiszę tylko tyle: WTF?
  Forum: PHP · Podgląd postu: #1161424 · Odpowiedzi: 4 · Wyświetleń: 753

Xelah
Napisane: 2.06.2015, 07:31:09





Grupa: Zarejestrowani
Postów: 139
Dołączył: 12.05.2013
Skąd: Hamburg

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

Nawet się wysiliłem i poszukałem książek w języku ojczystym (ale jak przeczytasz w oryginale to nie zaszkodzi wink.gif)

http://helion.pl/ksiazki/czysty-kod-podrec...rtin,czykov.htm (Clean Code: A Handbook of Agile Software Craftsmanship)
http://helion.pl/ksiazki/zwinne-wytwarzani...rtin,zwiwyo.htm (Agile Software Development, Principles, Patterns, and Practices)
http://helion.pl/ksiazki/mistrz-czystego-k...rtin,mckkod.htm (The Clean Coder: A Code of Conduct for Professional Programmers)

Chociaż nie mają one nic wspólnego z PHP, to nauczysz się z nich solidnych podstaw. To są wzorce, których większość można z łatwością zaaplikować w PHP.
Bo wszystko rozbija się o wzorce i koncepcje, które z powodzeniem można stosować w PHP (w przypadku PHP czasami z mniejszym powodzeniem wink.gif)

Jest jeszcze dostępna online:
http://c2.com/cgi/wiki?DesignPatternsBook

Jeśli sobie radzisz z angielskim (a jako programista powinieneś), to ta również należy do kanonu lektur obowiązkowych.


Jedna bardzo ważna uwaga. Nie traktuj wszystkiego z tych książek jako dogmat. To są wskazówki i w wzorce a nie bezwzględne wytyczne. Jeśli jesteś w stanie logicznie wytłumaczyć dlaczego tak a nie inaczej, to nic strasznego się nie stanie smile.gif
  Forum: Frameworki · Podgląd postu: #1160287 · Odpowiedzi: 8 · Wyświetleń: 694

Xelah
Napisane: 1.06.2015, 17:04:07





Grupa: Zarejestrowani
Postów: 139
Dołączył: 12.05.2013
Skąd: Hamburg

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

Cytat(adam1024 @ 1.06.2015, 15:38:20 ) *
Doświadczenie mam w programowaniu strukturalnym, a o obiektowym mam jakieś pojęcie dlatego chcę się rozwinąć w tym kierunku i poszerzyć swoją wiedzę to po pierwsze a po drugie korzystanie z frameworków chyba w znacznym stopniu upraszcza życie webdevelopera :D


Jeśli chcesz poszerzać wiedzę, to proponuję zacząć od pisania kodu OO samemu. Nie rzucaj się na głęboką wodę, bo jedyne czego nauczysz się z frameworka takiego jak Symfony czy Zend, że coś gdzieś się magicznie dzieje i możesz tego w ten czy inny sposób używać.
A jak ktoś Cię poprosi o napisanie czegoś samemu w OOP to i tak nie dasz rady, bo jedyne co będziesz wiedział to to, jak to zrobić w SF czy ZF.

Ja osobiście używam SF już od wersji 0.9.6 ale prawda jest taka, że to wszystko bardziej kwestia upodobań niż konkretnych za/przeciw. Oba frameworki mją swoje plusy i minusy. Nawet jak popatrzysz na dokumentaję jednego czy drugiego to zauważysz, że nawet one mają problem ze stosowaniem się do OOP.

To niestety są tylko frameworki. Zrobione tak, żeby zadowolić jak największą liczbę odbiorców a nie jak najoptymalniej rozwiązać konkretny problem.

Zacznij od nauki OOP, a jak już będziesz w tym dobry, to wybierz framework (lub własne rozwiązanie albo tylko niektóre komponenty) który Ci bardziej odpowiada.

Co do popularności, to wejdź w kilka wyszukiwarek pracy i wpisz Zend a potem Symfony. Będziesz miał obraz tego, co się obecnie dzieje.
  Forum: Frameworki · Podgląd postu: #1160231 · Odpowiedzi: 8 · Wyświetleń: 694

Xelah
Napisane: 1.06.2015, 09:55:56





Grupa: Zarejestrowani
Postów: 139
Dołączył: 12.05.2013
Skąd: Hamburg

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

Poczytaj o takich rzeczach jak Selenium i jMeter.
  Forum: Kontrola i zarządzanie projektami · Podgląd postu: #1160191 · Odpowiedzi: 4 · Wyświetleń: 1 180

Xelah
Napisane: 27.05.2015, 14:37:44





Grupa: Zarejestrowani
Postów: 139
Dołączył: 12.05.2013
Skąd: Hamburg

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

Cytat(adam1024 @ 27.05.2015, 14:05:04 ) *
Temat można zamknąć, wystarczyło w przypadku tej funkcji dodać wewnątrz
Kod
global $war1,$war2,$war3;


Słuchaj tego, co mówią bardzie doświadczeni. Nie używa się global. Nigdy. Na prawdę nigdy. A skoro to jest twój kod to nie ma nawet jednego teoretycznego use case-a na usprawiedliwienie global. A każdy, kto twierdzi inaczej to .... (wstaw dowolny epitet).

Zmienne przekazuje się do funkcji a jak to, co jest w środku jes potrzebne po wywyłaniu funkcji to masz return. Nie ma innej opcji.
  Forum: PHP · Podgląd postu: #1159677 · Odpowiedzi: 6 · Wyświetleń: 319

Xelah
Napisane: 25.05.2015, 19:32:31





Grupa: Zarejestrowani
Postów: 139
Dołączył: 12.05.2013
Skąd: Hamburg

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

Kod
setTimeout(function(tablica, i) {}, i*2000, tablica, i);


https://jsfiddle.net/ex5fp5uw/
  Forum: Przedszkole · Podgląd postu: #1159369 · Odpowiedzi: 4 · Wyświetleń: 276

Xelah
Napisane: 25.05.2015, 11:31:06





Grupa: Zarejestrowani
Postów: 139
Dołączył: 12.05.2013
Skąd: Hamburg

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

Cytat(frankiejojo @ 24.05.2015, 11:24:50 ) *
Można by co prawda załatwić ten temat perspektywami typu
Create view uprawnienia1 as select*from table where user ='uzytkownik';


Tylko musisz pamiętać, żeby użyć
Kod
SQL SECURITY DEFINER
i tenże definer musi mieć odpowiednie uprawnienia do wszystkich tabel czy kolumn z widoku. Inaczej doestaniesz ERROR 1356.

Cytat(frankiejojo @ 24.05.2015, 11:24:50 ) *
tylko, że nie mogę nigdzie znaleźć wzorca do perspektywy z delete, insert i updatem - proste przeróbki nie działają. no i dobrze by było zrobić to jedną perspektywą a nie czterema.


https://dev.mysql.com/doc/refman/5.0/en/vie...datability.html

Musisz pamiętać, że nie każdy widok można aktualizować. Obostrzenia są całkiem spore.

Poza tym w takiej sytuacji musisz mieć widoki do każdego możliwego zapytania. Nie ma widoku = nie ma możliwości czytania/zapisania. Czyli musisz mieć predefiniowaną listę tego, co, gdzie i jak user robić może.

Przydało by się jakieś dodatkowe info. Bo jakoś dalej nie rozumiem, dlaczego chcesz to robić na poziomie bazy a nie aplikacji. Jeśli zrobisz na poziomie aplikacji to możesz bez problemu podmienić bazę. Ale jak zrobisz na poziomie bazy to masz hard coupling pomiędzy aplikacją i bazą i bez modyfikacji obu nie zmienisz bazy.
  Forum: MySQL · Podgląd postu: #1159319 · Odpowiedzi: 3 · Wyświetleń: 447

Xelah
Napisane: 22.05.2015, 13:50:03





Grupa: Zarejestrowani
Postów: 139
Dołączył: 12.05.2013
Skąd: Hamburg

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

Ktoś się nawet nie raczył pofatygować do dokumentacji, żeby zrozumieć, co się dzieje...

  1. $html = file_get_contents('https://twitter.com/katyperry');
  2.  
  3. $doc = new DomDocument();
  4. @$doc->loadHTML($html);
  5.  
  6. $xpath = new DOMXpath($doc);
  7. $elements = $xpath->query("//p[contains(concat(' ', @class, ' '), ' ProfileTweet-text ')]//a[contains(@href,'hashtag/TheMet?')]/ancestor::p");
  8.  
  9. if($elements->length > 0) {
  10. foreach($elements as $element) {
  11. echo trim($element->textContent). PHP_EOL;
  12. }
  13. }


Poza tym, jesteś świadomy, że strona, którą ładujesz nie zawiera ani jednego elementu z klasą "ProfileTweet-text"?
Wyrażenia regularne w niczym ci nie pomogą. Problem jest w zupełnie innym miejscu... Tam po prostu nie ma tego, czego szukasz... Proponowałbym spróbować ze kontem, na którym są jakieś posty :)
  Forum: Przedszkole · Podgląd postu: #1159044 · Odpowiedzi: 20 · Wyświetleń: 797

Xelah
Napisane: 20.05.2015, 07:48:12





Grupa: Zarejestrowani
Postów: 139
Dołączył: 12.05.2013
Skąd: Hamburg

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

Chyba GitHub. Tam i owszem, prywatne repo są płatne. Ale już na Bitbucket nie.

https://bitbucket.org/plans
  Forum: Kontrola i zarządzanie projektami · Podgląd postu: #1158691 · Odpowiedzi: 10 · Wyświetleń: 1 647


New Posts  Nowe odpowiedzi
No New Posts  Brak nowych odpowiedzi
Hot topic  Popularny temat (Nowe)
No new  Popularny temat (Brak nowych)
Poll  Sonda (Nowe)
No new votes  Sonda (Brak nowych)
Closed  Zamknięty temat
Moved  Przeniesiony temat
 

RSS Wersja Lo-Fi Aktualny czas: 28.03.2024 - 13:22