Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00044 008679 14651457 na godz. na dobę w sumie
Mistrz PHP. Pisz nowoczesny kod - książka
Mistrz PHP. Pisz nowoczesny kod - książka
Autor: , , Liczba stron: 304
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-246-4472-8 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> webmasterstwo >> php - programowanie
Porównaj ceny (książka, ebook, audiobook).

Wykorzystaj najnowsze techniki programowania, dzięki którym osiągniesz wyższy poziom zaawansowania

'Mistrz PHP. Pisz nowoczesny kod' to książka przeznaczona dla programistów PHP, którzy znają już podstawy tego języka i chcą rozwinąć swoje umiejętności, by tworzyć bardziej zaawansowane rozwiązania. Znajdziesz w niej cenne rady, jak udoskonalić swoje aplikacje serwerowe, oraz wszystko, czego potrzeba do stosowania najefektywniejszych technik obiektowych, zabezpieczania kodu czy pisania programów idealnie spełniających swoje zadania. W każdym rozdziale poznasz nowe sposoby wykonywania pewnych zadań oraz nowe teorie, leżące u podłoża stosowanych przez Ciebie technik.

Dzięki lekturze tej publikacji przemienisz się ze sprawnego programisty w pewnego siebie inżyniera - stosującego najlepsze praktyki programistyczne, pracującego szybko i solidnie. Autorzy przedstawiają praktyczne problemy i użyteczne rozwiązania, które zaprowadzą Cię na szczyt kariery! Jeśli szukasz możliwości scementowania całej swojej wiedzy i chcesz zdobyć solidne podstawy, ta książka jest dla Ciebie.

Dowiesz się z niej, jak:

...i wiele więcej

Praktyczne problemy i użyteczne rozwiązania,
które zaprowadzą Cię na szczyt kariery!


Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

Tytuł oryginału: PHP Master: Write Cutting-edge Code Tłumaczenie: Łukasz Piwko ISBN: 978-83-246-4472-8 © Helion 2012. Authorized Polish translation of the English edition of PHP Master, 1st Edition ISBN 9780987090874 © 2011, SitePoint Pty. Ltd. This translation is published and sold by permission of O’Reilly Media, Inc., theźowner of all rights to publish and sell the same. All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from the Publisher. Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji. Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli. Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce. Wydawnictwo HELION ul. Kościuszki 1c, 44-100 GLIWICE tel. 32 231 22 19, 32 230 98 63 e-mail: helion@helion.pl WWW: http://helion.pl (księgarnia internetowa, katalog książek) Drogi Czytelniku! Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/misphp Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję. Printed in Poland. • Kup książkę • Poleć książkę • Oceń książkę • Księgarnia internetowa • Lubię to! » Nasza społeczność Spis treĂci WstÚp ........................................................................................................................13 Adresaci ksiÈĝki ..........................................................................................................13 ZawartoĂÊ ksiÈĝki .......................................................................................................14 Strona internetowa ksiÈĝki .........................................................................................16 PodziÚkowania ...........................................................................................................16 Konwencje typograficzne ............................................................................................17 Wskazówki, uwagi i ostrzeĝenia .................................................................................18 Rozdziaï 1. Programowanie obiektowe .................................................... 19 Dlaczego programowanie obiektowe .........................................................................19 Terminologia obiektowa .......................................................................................19 Wprowadzenie do programowania obiektowego .......................................................20 Deklarowanie klas ................................................................................................20 Konstruktory .........................................................................................................21 Tworzenie obiektów .............................................................................................21 Automatyczne ïadowanie .....................................................................................22 Uĝywanie obiektów ..............................................................................................23 WïasnoĂci i metody statyczne ...............................................................................23 Obiekty i przestrzenie nazw ..................................................................................24 Dziedziczenie ..............................................................................................................27 Obiekty i funkcje .........................................................................................................29 OkreĂlanie typów parametrów ..............................................................................29 Polimorfizm ..........................................................................................................29 Obiekty i referencje ...............................................................................................30 Przekazywanie obiektów jako parametrów funkcji ................................................31 Pïynne interfejsy ...................................................................................................32 Sïowa kluczowe public, private i protected .................................................................33 Modyfikator public ...............................................................................................33 Modyfikator private ..............................................................................................33 Modyfikator protected ..........................................................................................34 Wybór zakresu dostÚpnoĂci ..................................................................................34 Kontrola dostÚpnoĂci przy uĝyciu metod sprawdzajÈcych i ustawiajÈcych .............35 Magiczne metody __get i __set ............................................................................36 Interfejsy ....................................................................................................................37 Interfejs Countable z biblioteki SPL .......................................................................37 Liczenie obiektów .................................................................................................37 Deklarowanie i uĝywanie interfejsów ...................................................................38 Identyfikowanie obiektów i interfejsów ................................................................39 6 Mistrz PHP. Pisz nowoczesny kod WyjÈtki .......................................................................................................................40 Obsïuga wyjÈtków ................................................................................................40 Dlaczego naleĝy uĝywaÊ wyjÈtków .......................................................................41 Zgïaszanie wyjÈtków ............................................................................................41 Rozszerzanie klas wyjÈtków ..................................................................................41 Przechwytywanie wybranych typów wyjÈtków .....................................................42 Ustawianie globalnej procedury obsïugi wyjÈtków ...............................................43 Wywoïania zwrotne .............................................................................................44 Metody magiczne — zaawansowane wiadomoĂci .....................................................44 Metody __call() i __callStatic() ..............................................................................45 Drukowanie zawartoĂci obiektów przy uĝyciu metody __toString() .......................46 Serializacja obiektów ............................................................................................46 OsiÈgniÚte cele ...........................................................................................................48 Rozdziaï 2. Bazy danych ................................................................................ 49 Dane trwaïe i aplikacje sieciowe .................................................................................49 Sposoby skïadowania danych .....................................................................................50 Budowanie serwisu z przepisami na podstawie bazy MySQL ......................................51 Tworzenie tabel ....................................................................................................51 Rozszerzenie PDO .......................................................................................................53 ’Èczenie siÚ z bazÈ MySQL przy uĝyciu PDO ..........................................................53 Pobieranie danych z tabel w bazie ........................................................................54 Tryby pobierania danych ......................................................................................54 Parametry i instrukcje preparowane ......................................................................55 WiÈzanie wartoĂci i zmiennych z instrukcjami preparowanymi ..............................57 Wstawianie wiersza i pobieranie jego identyfikatora ............................................58 Sprawdzanie liczby wstawionych, zmienionych i usuniÚtych rekordów .................59 Usuwanie danych .................................................................................................60 Obsïuga bïÚdów w PDO .............................................................................................60 Obsïuga bïÚdów zwiÈzanych z przygotowywaniem zapytañ .................................60 Obsïuga bïÚdów zwiÈzanych z wykonywaniem zapytañ .......................................61 Obsïuga bïÚdów zwiÈzanych z pobieraniem danych .............................................62 Zaawansowane funkcje PDO ......................................................................................63 Transakcje a PDO ..................................................................................................63 Procedury skïadowane i PDO ................................................................................64 Projektowanie bazy danych ........................................................................................65 Klucze gïówne i indeksy ........................................................................................65 Polecenie MySQL Explain ......................................................................................65 ZïÈczenia wewnÚtrzne ..........................................................................................69 ZïÈczenia zewnÚtrzne ............................................................................................70 Funkcje agregujÈce i grupowanie .........................................................................71 Normalizacja danych ............................................................................................72 Podsumowanie ..........................................................................................................74 SPIS TRE¥CI 7 Rozdziaï 3. Interfejsy programistyczne ...................................................... 75 Zanim zaczniesz .........................................................................................................75 NarzÚdzia do pracy z API ......................................................................................75 Dodawanie API do systemu ..................................................................................76 Architektura usïugowa ...............................................................................................76 Formaty danych ..........................................................................................................77 Format JSON .........................................................................................................77 Format XML ..........................................................................................................79 HTTP — protokóï przesyïania hipertekstu ...................................................................82 Dane przesyïane w nagïówkach HTTP ...................................................................82 Wysyïanie ĝÈdañ HTTP ..........................................................................................83 Kody statusu HTTP ................................................................................................87 Nagïówki HTTP .....................................................................................................87 Czasowniki HTTP ..................................................................................................91 Kryteria wyboru typów usïug ......................................................................................92 PHP i SOAP ...........................................................................................................92 Opis usïug SOAP za pomocÈ jÚzyka WSDL ............................................................94 Diagnozowanie HTTP .................................................................................................95 Gromadzenie informacji w dzienniku ....................................................................95 Kontrola ruchu HTTP .............................................................................................96 Usïugi RPC .................................................................................................................96 Korzystanie z usïug RPC: przykïad na podstawie serwisu Flickr .............................97 Tworzenie usïugi RPC ...........................................................................................98 Usïugi sieciowe a Ajax ..............................................................................................100 ¿Èdania miÚdzydomenowe .................................................................................104 Usïugi RESTful ..........................................................................................................106 WiÚcej niĝ piÚkne adresy URL .............................................................................107 Zasady usïug RESTful ..........................................................................................107 Budowanie usïugi RESTful ..................................................................................108 Projektowanie usïugi sieciowej .................................................................................114 Do usïug ..................................................................................................................115 Rozdziaï 4. Wzorce projektowe ................................................................. 117 Czym sÈ wzorce projektowe .....................................................................................117 Wybieranie wzorca .............................................................................................117 Wzorzec singleton ..............................................................................................118 Cechy .................................................................................................................119 Wzorzec rejestr ...................................................................................................120 Wzorzec fabryka .................................................................................................124 Wzorzec iterator .................................................................................................125 Wzorzec obserwator ...........................................................................................133 8 Mistrz PHP. Pisz nowoczesny kod Wzorzec wstrzykiwanie zaleĝnoĂci ......................................................................136 Wzorzec model-widok-kontroler .........................................................................139 Tworzenie wzorców .................................................................................................150 Rozdziaï 5. Bezpieczeñstwo ....................................................................... 151 Dziaïaj jak paranoik ..................................................................................................151 Filtruj dane wejĂciowe, koduj dane wyjĂciowe .........................................................152 Filtrowanie i weryfikacja .....................................................................................152 Cross-site scripting ...................................................................................................153 Atak ...................................................................................................................154 Obrona ...............................................................................................................155 Materiaïy w internecie ........................................................................................155 Cross-site Request Forgery .......................................................................................156 Atak ...................................................................................................................156 Obrona ...............................................................................................................157 Materiaïy w internecie ........................................................................................159 Session fixation ........................................................................................................159 Atak ...................................................................................................................159 Obrona ...............................................................................................................160 Materiaïy w internecie ........................................................................................160 Session hijacking ......................................................................................................161 Atak ...................................................................................................................161 Obrona ...............................................................................................................162 Materiaïy w internecie ........................................................................................163 SQL injection ............................................................................................................163 Atak ...................................................................................................................163 Obrona ...............................................................................................................164 Materiaïy w internecie ........................................................................................165 Przechowywanie haseï .............................................................................................165 Atak ...................................................................................................................165 Obrona ...............................................................................................................166 Materiaïy w internecie ........................................................................................167 Atak siïowy ..............................................................................................................167 Atak ...................................................................................................................167 Obrona ...............................................................................................................169 Materiaïy w internecie ........................................................................................169 SSL ...........................................................................................................................170 Atak ...................................................................................................................170 Obrona ...............................................................................................................171 Materiaïy w internecie ........................................................................................171 Dodatkowe zasoby ...................................................................................................172 SPIS TRE¥CI 9 Rozdziaï 6. WydajnoĂÊ ................................................................................. 173 Benchmarking ..........................................................................................................173 Dostrajanie systemu .................................................................................................179 Zapisywanie kodu w pamiÚci podrÚcznej ............................................................179 Ustawienia inicjacyjne ........................................................................................184 Bazy danych .............................................................................................................184 System plików ..........................................................................................................185 Buforowanie .......................................................................................................185 Profilowanie .............................................................................................................192 Instalowanie narzÚdzia XHProf ...........................................................................193 Instalowanie XHGui ............................................................................................197 Podsumowanie ........................................................................................................204 Rozdziaï 7. Automatyzacja testów ........................................................... 205 Testy jednostkowe ...................................................................................................205 Instalowanie narzÚdzia PHPUnit .........................................................................206 Pisanie przypadków testowych ...........................................................................206 Wykonywanie testów .........................................................................................208 Dublery ..............................................................................................................210 Pisanie kodu przystosowanego do testowania ....................................................213 Pisanie testów dla widoków i kontrolerów .........................................................217 Testowanie baz danych ............................................................................................221 Przypadki testowe baz danych ............................................................................221 PoïÈczenia ..........................................................................................................222 Zbiory danych .....................................................................................................223 Asercje ...............................................................................................................225 Testowanie systemowe ............................................................................................226 WstÚpna konfiguracja .........................................................................................226 Polecenia ............................................................................................................227 Lokalizatory ........................................................................................................228 Asercje ...............................................................................................................229 Integracja z bazÈ danych ....................................................................................230 Diagnozowanie usterek ......................................................................................231 Automatyzacja pisania testów ............................................................................232 Testowanie obciÈĝeniowe ........................................................................................233 ab .......................................................................................................................233 Siege ..................................................................................................................234 Wypróbowane i przetestowane ................................................................................236 10 Mistrz PHP. Pisz nowoczesny kod Rozdziaï 8. Kontrola jakoĂci ....................................................................... 237 Pomiar jakoĂci za pomocÈ narzÚdzi analizy statycznej ...............................................237 NarzÚdzie phploc ................................................................................................238 NarzÚdzie phpcpd ...............................................................................................239 NarzÚdzie phpmd ...............................................................................................240 Standardy kodowania ...............................................................................................241 Weryfikacja kodu pod kÈtem standardów kodowania przy uĝyciu narzÚdzia PHP_CodeSniffer ..............................................................................................241 PrzeglÈdanie przypadków naruszenia reguï standardów kodowania ...................243 Standardy kodowania w narzÚdziu PHP_CodeSniffer ..........................................244 Dokumentacja i kod ..................................................................................................244 NarzÚdzie phpDocumentor .................................................................................246 Inne narzÚdzia dokumentacyjne ..........................................................................248 Kontrola ěródïa .........................................................................................................248 Praca z centralnym systemem kontroli wersji ......................................................249 Kontrola ěródïa przy uĝyciu systemu Subversion .................................................250 Projektowanie struktury repozytorium ................................................................252 Rozproszone systemy kontroli wersji ...................................................................254 SpoïecznoĂciowe narzÚdzia dla programistów ....................................................255 Kontrola kodu ěródïowego przy uĝyciu narzÚdzia Git ..........................................255 Repozytorium jako centrum procesu budowy ......................................................257 Automatyzacja procesu wdraĝania ...........................................................................257 Natychmiastowe przeïÈczanie na nowÈ wersjÚ ...................................................257 ZarzÈdzanie zmianami w bazie danych ...............................................................258 Automatyzacja wdraĝania i plik konfiguracyjny Phing .........................................259 Gotowi do wdraĝania ...............................................................................................261 Dodatek A Biblioteki PEAR i PECL ............................................................ 263 Biblioteka PEAR ........................................................................................................263 Biblioteka PECL ........................................................................................................263 Instalowanie pakietów .............................................................................................264 Kanaïy PEAR .......................................................................................................266 Uĝywanie kodu PEAR ..........................................................................................268 Instalowanie rozszerzeñ ...........................................................................................268 RÚczne kompilowanie rozszerzeñ ........................................................................269 Tworzenie pakietów .................................................................................................272 Kontrola wersji pakietów ..........................................................................................276 Tworzenie kanaïu .....................................................................................................277 Co dalej ....................................................................................................................280 SPIS TRE¥CI 11 Dodatek B SPL: Standard PHP Library ..................................................... 281 Interfejsy ArrayAccess i ArrayObject ..........................................................................281 Automatyczne wczytywanie .....................................................................................282 Praca na katalogach i plikach ...................................................................................283 Interfejs Countable ...................................................................................................285 Struktury danych ......................................................................................................286 Tablice o staïym rozmiarze ..................................................................................286 Listy ....................................................................................................................286 Stosy i kolejki .....................................................................................................287 Sterty ..................................................................................................................287 Kolejki priorytetowe ...........................................................................................288 Funkcje ...............................................................................................................288 Dodatek C Dalszy rozwój ........................................................................... 289 Czytaj, czytaj, czytaj ..................................................................................................289 Uczestnictwo w wydarzeniach ..................................................................................290 Grupy uĝytkowników ................................................................................................291 SpoïecznoĂci internetowe .........................................................................................291 Projekty typu open source ........................................................................................292 Skorowidz .................................................................................. 293 12 Mistrz PHP. Pisz nowoczesny kod Rozdziaï Kontrola jakoĂci Ten rozdział jest kontynuacją opisanego w poprzednim rozdziale tematu automatyzacji testów. Poznasz w nim narzędzia pozwalające zapewnić wysoką jakość pisanych przez siebie programów. Wśród nich znajdują się programy do kontroli wersji kodu źródłowego, wspomagające współpracę między członkami zespołu programistycznego i ułatwiające panowanie nad rozwojem programu, oraz narzędzia do automatycznego wdrażania systemów do środowiska produkcyjnego, które w od- różnieniu od człowieka o niczym nie zapominają. Ponadto poznasz techniki analizy kodu w celu sprawdzenia, czy jest spójny i dobrze sformatowany, oraz dowiesz się, jak się generuje dokumen- tację z kodu źródłowego. Wymienione narzędzia to elementy każdego dobrze prowadzonego projektu, w którym ograni- czono do minimum ilość czasu potrzebnego na zajmowanie się mniej ważnymi aspektami tech- nicznymi, a więcej pozostawiono na budowę wspaniałego programu. Pomiar jakoĂci za pomocÈ narzÚdzi analizy statycznej Analiza statyczna polega na badaniu kodu bez jego uruchamiania. Narzędzia służące do jej wy- konywania oceniają kod w takiej postaci, w jakiej jest zapisany w plikach. Istnieje wiele progra- mów, których można używać do tego celu, a co ciekawe, za najlepsze z nich nie trzeba płacić. Dzięki tym narzędziom można uzyskać ogólny obraz podstawy kodu (lub jej części), nawet gdy jest ona bardzo skomplikowana i obszerna. Narzędzia do analizy statycznej stanowią jeden z kluczowych składników projektu programi- stycznego, ale są naprawdę przydatne tylko wtedy, kiedy włącza się je regularnie, najlepiej za każdym razem po zatwierdzeniu kodu w systemie zarządzania kodem źródłowym. Zwracają wiele cen- nych informacji na temat kodu (od liczby klas i wierszy, po wskazanie podobnych fragmentów), co może oznaczać, że zostały skopiowane z jednego miejsca i wklejone do innego! Pokażemy, w jaki sposób narzędzia do analizy statycznej pomagają zapanować nad dwoma niezmiernie ważnymi aspektami: standardami kodowania i dokumentacją. 238 Mistrz PHP. Pisz nowoczesny kod Wszystkie narzędzia, które opisano w tej części rozdziału, można pobrać z biblioteki PEAR — opis, jak instaluje się programy przy użyciu tego narzędzia do zarządzania pakietami, znajduje się w do- datku A. Niektóre z tych programów mogą też być dostępne poprzez menedżer pakietów systemu operacyjnego, jeśli używasz jednego z systemów uniksowych. Możesz skorzystać z tej możliwości, ale pamiętaj, że istnieje duże ryzyko, iż wersje tak dostępnych aplikacji będą nieaktualne. NarzÚdzie phploc Nazwa PHP Lines of Code (wiersze kodu PHP) może nie brzmi zbyt zachęcająco, ale narzędzie to dostarcza naprawdę cennych informacji, zwłaszcza gdy jest uruchamiane wielokrotnie przez pe- wien czas. Dzięki niemu można poznać topologię i rozmiar projektu. Oto wynik zwrócony przez narzędzie phploc dla standardowej wersji systemu WordPress: $ phploc wordpress/ phploc 1.6.1 by Sebastian Bergmann. Directories: 26 Files: 380 Lines of Code (LOC): 171170 Cyclomatic Complexity / Lines of Code: 0.19 Comment Lines of Code (CLOC): 53521 Non-Comment Lines of Code (NCLOC): 117649 Namespaces: 0 Interfaces: 0 Classes: 190 Abstract: 0 (0.00 ) Concrete: 190 (100.00 ) Average Class Length (NCLOC): 262 Methods: 1990 Scope: Non-Static: 1986 (99.80 ) Static: 4 (0.20 ) Visibility: Public: 1966 (98.79 ) Non-Public: 24 (1.21 ) Average Method Length (NCLOC): 25 Cyclomatic Complexity / Number of Methods: 5.56 Anonymous Functions: 0 Functions: 2330 Constants: 351 Global constants: 348 Class constants: 3 System ten zawiera bardzo dużą liczbę wierszy kodu, a ponieważ jego początki sięgają dość daleko w przeszłość, elementów języka PHP 5 jest w nim niewiele. Dzięki phploc można sprawdzić roz- miar nieznanego programu albo analizować przyrost i zmiany kodu we własnym projekcie. Aby użyć phploc, należy zastosować następujące polecenie: phploc wordpress/ KONTROLA JAKO¥CI 239 Jego wynik będzie podobny do pokazanego powyżej. Dane te można zapisać w różnych formatach, np. XML do użytku w systemie ciągłej integracji. ZïoĝonoĂÊ cyklomatyczna ZïoĝonoĂÊ cyklomatyczna to, najproĂciej mówiÈc, miara okreĂlajÈca liczbÚ Ăcieĝek wykonania funkcji (tzn. pokazujÈca, jak bardzo ta funkcja jest skomplikowana), zwiÈzana z tym, ile testów moĝe byÊ potrzebnych do caïkowitego przetestowania funkcji. Ogólnie rzecz biorÈc: bardzo wysoka wartoĂÊ oznacza, ĝe lepiej prze- pisaÊ funkcjÚ od nowa i wydzieliÊ z niej mniejsze metody, które bÚdzie ïatwiej przetestowaÊ. NarzÚdzie phpcpd PHP Copy Paste Detector (wykrywacz kopiowania i wklejania kodu PHP) to narzędzie wyszuku- jące w kodzie źródłowym takie same fragmenty w celu wykrycia części, które zostały skopiowane z jednego miejsca i wklejone do innego. Warto regularnie korzystać z tego dodatku, mimo że nie da się określić, jaki wynik jest najlepszy, jest to bowiem miara zależna od konkretnego projektu. W ramach przykładu ponownie użyjemy systemu WordPress, ponieważ jest to dobrze wszystkim znany projekt typu open source: $ phpcpd wordpress/ phpcpd 1.3.2 by Sebastian Bergmann. Found 33 exact clones with 562 duplicated lines in 14 files: - wp-admin/includes/update-core.php:482-500 wp-admin/includes/file.php:733-751 - wp-admin/includes/class-wp-filesystem-ssh2.php:346-365 wp-admin/includes/class-wp-filesystem-direct.php:326-345 ... - wp-includes/class-simplepie.php:10874-10886 wp-includes/class-simplepie.php:13185-13197 - wp-content/plugins/akismet/admin.php:488-500 wp-content/plugins/akismet/admin.php:537-549 - wp-content/plugins/akismet/legacy.php:234-248 wp-content/plugins/akismet/legacy.php:301-315 0.33 duplicated lines out of 171170 total lines of code. Time: 6 seconds, Memory: 154.50Mb Dane takie szczególnie warto analizować przez pewien czas. To narzędzie może również zapisy- wać wyniki w formacie XML zrozumiałym dla systemu ciągłej integracji, dzięki czemu można je bezproblemowo dodać do skryptów wdrożeniowych i zwrócone informacje przedstawić w postaci wykresu. Mając wykaz nowych fragmentów kodu, które są do siebie podobne, można wykryć wszystkie duplikaty kodu i zastanowić się nad możliwościami wielokrotnego wykorzystania kodu. Należy jednak pamiętać, że nie zawsze ponowne użycie kodu jest korzystne. Zawsze warto rozwa- żyć taką możliwość, jednak nie należy z tym przesadzać. 240 Mistrz PHP. Pisz nowoczesny kod NarzÚdzie phpmd PHP Project Mess Detector (wykrywacz bałaganu w PHP) to narzędzie pozwalające znaleźć w kodzie tzw. „śmierdzące fragmenty” (ang. code smells). Przeszukuje ono kod, stosując szereg metryk, aby znaleźć fragmenty, które wydają się nie w porządku. Program ten zwraca bardzo dużo danych, ale większość z nich to tylko dobre rady. Poniżej znajduje się fragment wyniku wyszukiwania pro- blemów związanych z nazwami w systemie WordPress: $ phpmd wordpress/ text naming /home/lorna/downloads/wordpress/wp-includes/widgets.php:32 ™ /home/lorna/downloads/wordpress/wp-includes/widgets.php:76 š /home/lorna/downloads/wordpress/wp-includes/widgets.php:189 › /home/lorna/downloads/wordpress/wp-includes/widgets.php:319 œ /home/lorna/downloads/wordpress/wp-includes/widgets.php:333I  /home/lorna/downloads/wordpress/wp-includes/widgets.php:478 ž /home/lorna/downloads/wordpress/wp-includes/widgets.php:496 Ÿ ™ Avoid variables with short names like $id. (Staraj się nie stosować krótkich nazw zmiennych, takich jak $id). š Classes shouldn’t have a constructor method with the same name as the class. (Konstruktor klasy nie powinien nazywać się tak samo jak zawierająca go klasa). › Avoid excessively long variable names like $wp_registered_widgets. (Staraj się nie nadawać zmiennym zbyt długich nazw, takich jak $wp_registered_widgets). œ Classes shouldn’t have a constructor method with the same name as the class. (Konstruktor klasy nie powinien nazywać się tak samo jak zawierająca go klasa).  Avoid excessively long variable names like $wp_registered_widgets. (Staraj się nie nadawać zmiennym zbyt długich nazw, takich jak $wp_registered_widgets). ž Avoid excessively long variable names like $wp_registered_sidebars. (Staraj się nie nadawać zmiennym zbyt długich nazw, takich jak $wp_registered_sidebars). Ÿ Avoid extremely short variable names like $n. (Staraj się nie używać bardzo krótkich nazw zmiennych, takich jak $n). Narzędzie takie pewnie w każdym projekcie wyświetli jakieś błędy, ale warto z niego korzystać, aby móc zaobserwować ogólne tendencje. W punkcie 2. znajduje się komentarz, że nazwa kon- struktora nie może być taka sama jak nazwa zawierającej go klasy, ale WordPress do niedawna był zgodny z PHP 4, więc nie jest to w nim błędem. Dostępne są jeszcze inne reguły, takie jak: metryki dotyczące rozmiaru kodu, elementy projektowe (np. wyszukiwanie użyć funkcji eval()) i znajdowanie nieużywanego kodu. Wszystkie te narzędzia pozwalają lepiej zrozumieć zakres i kształt bazy kodu oraz ukazują obszary, które mogą wymagać poprawienia. W następnym podrozdziale pokażemy, jak sprawdzić, czy kod jest napisany zgodnie ze standardami kodowania. KONTROLA JAKO¥CI 241 Standardy kodowania Standardy kodowania to w niektórych zespołach programistycznych temat gorących dyskusji. Skoro rozmieszczenie wcięć i spacji nie ma żadnego znaczenia dla sposobu wykonywania kodu, to po co w ogóle definiować jakieś zasady, a potem się ich trzymać? Chodzi o to, że przyzwycza- jamy się do określonego sposobu formatowania kodu i jeśli napotkamy kod napisany w taki sposób, łatwiej jest nam go zrozumieć. Czasami jednak rozmieszczenie wszystkiego zgodnie ze standardem bywa bardzo trudne. Możesz przeczytać wszystkie wytyczne dotyczące projektu, do którego właśnie przystąpiłeś, ale i tak, gdy tylko zaczynasz pisać, zapominasz, gdzie powinien znajdować się każdy rodzaj nawiasu. Problem ten rozwiązuje się na dwa sposoby. Po pierwsze, poprzez odpowiednią konfigurację edytora, aby poprawnie stosował zakończenia wierszy oraz właściwie wstawiał tabulatory i spacje. Po drugie, możesz użyć specjalnego narzędzia do sprawdzania kodu, o nazwie PHP_CodeSniffer. Weryfikacja kodu pod kÈtem standardów kodowania przy uĝyciu narzÚdzia PHP_CodeSniffer Najpierw trzeba zainstalować narzędzie na serwerze. To, czy zrobisz to na maszynie roboczej, czy na serwerze produkcyjnym, zależy od tego, jaką ilością zasobów dysponujesz. PHP_CodeSniffer jest dostępny w PEAR1 (szczegółowe informacje na temat korzystania z PEAR znajdują się w do- datku A). W wielu dystrybucjach Linuksa program ten jest również dostępny w postaci pakietu. Uĝycie narzÚdzia PHP_CodeSniffer do analizy kodu JavaScript i CSS JeĂli w projekcie znajdujÈ siÚ pliki JavaScript albo CSS, to je równieĝ moĝna sprawdziÊ pod kÈtem zgodnoĂci z odpowiednimi standardami kodowania. Po zainstalowaniu narzędzia można zacząć pracę. Sposób analizy kodu za jego pomocą przedsta- wimy na przykładzie bardzo prostej poniższej klasy: class Robot { protected $x = 0; protected $y = 0; public function getCatchPhrase() { return Oto ja, intelekt przewyĝszajÈcy... ; } public function Dance() { $xmove = rand(-2, 2); $ymove = rand(-2, 2); if($xmove != 0) { $this- x += $xmove; } if($ymove != 0) { 1 http://pear.php.net/package/PHP_CodeSniffer/. 242 Mistrz PHP. Pisz nowoczesny kod $this- y += $ymove; } return true; } } Kod ten wygląda całkiem normalnie, prawda? Zobaczmy, co na jego temat powie nam PHP_ CodeSniffer. W tym przykładzie użyjemy standardu PEAR: phpcs --standard=PEAR robot.php FILE: /home/lorna/data/personal/books/Sitepoint/PHPPro/qa/code/robot.php -------------------------------------------------------------- FOUND 10 ERROR(S) AND 0 WARNING(S) AFFECTING 6 LINE(S) -------------------------------------------------------------- 2 | ERROR | Missing file doc comment 4 | ERROR | Opening brace of a class must be on the line after the definition 4 | ERROR | You must use /** style comments for a class comment 8 | ERROR | Missing function doc comment 8 | ERROR | Opening brace should be on a new line 12 | ERROR | Public method name Robot::Dance is not in camel caps format 12 | ERROR | Missing function doc comment 12 | ERROR | Opening brace should be on a new line 15 | ERROR | Expected if (...) {\n ; found if(...) {\n 18 | ERROR | Expected if (...) {\n ; found if(...) {\n --------------------------------------------------------------- Popełniliśmy 10 błędów — biorąc pod uwagę, że kod składa się tylko z 10 wierszy, nie jest to do- brym wynikiem. Jeśli jednak przyjrzysz się dokładniej tym danym, zauważysz, że niektóre błędy się powtarzają. Komunikaty o błędach dotyczą braku komentarzy (Missing file doc comment), niewłaściwego umiejscowienia nawiasów (Opening brace should be on a new line i Opening brace of a class must be on the line after the definition) oraz braku spacji za instrukcjami if (Expected if (...) {\n ; found if(...) {\n ). Oto poprawiona wersja tej klasy: /** * Robot * * PHP Version 5 * * @category Example * @package Example * @author Lorna Mitchell lorna@lornajane.net * @copyright 2011 Sitepoint.com * @license PHP Version 3.0 {@link http://www.php.net/license/3_0.txt} * @link http://sitepoint.com */ class Robot { protected $x = 0; protected $y = 0; public function getCatchPhrase() { return Oto ja, intelekt przewyĝszajÈcy... ; } KONTROLA JAKO¥CI 243 public function dance() { $xmove = rand(-2, 2); $ymove = rand(-2, 2); if ($xmove != 0) { $this- x += $xmove; } if ($ymove != 0) { $this- y += $ymove; } return true; } } Po ponownym sprawdzeniu tego kodu zauważymy, że większość błędów zniknęła. Do rozwiąza- nia pozostała jeszcze tylko kwestia bloków komentarzy dla pliku i dla dwóch funkcji. Ponieważ w dalszej części rozdziału będziemy zajmować się pisaniem dokumentacji w kodzie, na razie zo- stawimy to bez poprawek. PrzeglÈdanie przypadków naruszenia reguï standardów kodowania PHP_CodeSniffer oferuje kilka ciekawych opcji widoku, które pozwalają wygodnie oglądać ra- porty i uzyskiwać ogólny obraz bazy kodu. Można je wyświetlić w taki sam sposób jak wcześniejszy szczegółowy raport albo wyeksportować do innego formatu. Aby wygenerować raport podsumo- wujący, należy zastosować następujące polecenie: phpcs --standard=PEAR --report=summary * ------------------------------------------------------------------ PHP CODE SNIFFER REPORT SUMMARY ------------------------------------------------------------------ FILE ERRORS WARNINGS ------------------------------------------------------------------ ...e/eventscontroller.php 93 10 ...e/rest/index.php 29 3 ...e/rest/request.php 4 0 ------------------------------------------------------------------ A TOTAL OF 126 ERROR(S) AND 13 WARNING(S) WERE FOUND IN 3 FILE(S) Te wygenerowane dla usługi RESTful z rozdziału 3. dane pozwalają zorientować się, jak działa opisywana funkcja. W raporcie tym podane są: liczba błędów i ostrzeżeń znalezionych w poszcze- gólnych plikach oraz suma wszystkich znalezionych błędów i ostrzeżeń. Raport można zapisać w kilku formatach, m.in. w CSV. Jednym z popularnych formatów jest ten używany przez narzędzie do formatowania kodu Javy, o nazwie Checkstyle2. PHP_CodeSniffer może generować dane w takim samym formacie jak Checkstyle (czyli XML), dzięki czemu można je wyświetlić przy użyciu dowolnego narzędzia obsługującego ten format. Zazwyczaj funkcji tej używa się w połączeniu ze środowiskiem ciągłej 2 http://checkstyle.sourceforge.net/. 244 Mistrz PHP. Pisz nowoczesny kod integracji, które generuje te dane regularnie i prezentuje je w formacie internetowym. Ponadto wyświetlany jest wykres przedstawiający liczby błędów i ostrzeżeń wraz z informacją o tym, które usterki poprawiono, a które są nowe. Standardy kodowania w narzÚdziu PHP_CodeSniffer Narzędzie PHP_CodeSniffer ma standardowo wbudowaną obsługę kilku standardów kodowania i pozwala na utworzenie i doinstalowanie nowych. Aby sprawdzić, jakie standardy są dostępne, należy wykonać polecenie phpcs z opcją -i: phpcs -i The installed coding standards are MySource, PEAR, Squiz, PHPCS and Zend Jednym z najpowszechniejszych jest standard PEAR, z którego korzysta większość zespołów pro- gramistycznych. Standardy Zend nie są aktualnie standardem Zend Framework (w Zend Framework używa się specjalnie dostosowanej wersji standardu PEAR). Squiz3 to całkiem dobry standard, ale ma bardzo restrykcyjne zasady dotyczące stosowania pustych wierszy, przez co trudno go używać na co dzień. Kluczem do efektywnego posługiwania się standardami kodowania jest wybranie jednego z nich i korzystanie z niego, a nie gadanie o nim, ponieważ najważniejsze jest to, aby w ogóle trzymać się jakiegoś standardu! Spór dotyczący tego, czy otwierająca klamra powinna znajdować się w tym samym wierszu co instrukcja, czy w następnym, jest tak jałowy jak dyskusja o tym, czy lepszy jest edytor Vim, czy Emacs. Tych kwestii nie da się ostatecznie rozstrzygnąć. Może się jednak zdarzyć, że podczas pracy nad programem wyniknie konieczność dostosowania albo rozluźnienia używanego standardu. Na przykład w projektach typu open source można zre- zygnować z oznaczania autora w komentarzach, ponieważ takiej informacji precyzyjnie podać się nie da. Utworzenie własnego standardu nie jest trudne, zwłaszcza gdy wykorzysta się już istniejące zasady do własnych celów. Standardy programu PHP_CodeSniffer zawierają szereg tzw. niuchaczy (ang. sniff), z których każdy wykonuje jedno ściśle określone zadanie, np. sprawdza, czy między instrukcją if a nawiasem jej warunku znajduje się spacja. Istniejące niuchacze można bardzo łatwo zmodyfikować, aby utworzyć własny nowy standard kodowania. Dokumentacja i kod Dla większości programistów pisanie dokumentacji to prawdziwa katorga. Jednym ze sposobów na ułatwienie sobie tej pracy jest pisanie dokumentacji bezpośrednio wewnątrz kodu, w formie komentarzy. Dzięki temu patrząc na kod, widzi się od razu jego opis. Wszystkie funkcje i klasy powinny być opatrzone komentarzami. Gdy wprowadza się jakieś zmiany w kodzie, można na bieżąco odpowiednio zmodyfikować jego dokumentację. Narzędzia weryfi- kujące zgodność ze standardami kodowania informują, gdzie brakuje komentarzy, dzięki czemu łatwiej jest pamiętać o konieczności ich wstawienia. 3 http://www.squizlabs.com/php-codesniffer. KONTROLA JAKO¥CI 245 Ponieważ składnia komentarzy jest ściśle określona (o czym przekonaliśmy się w części „Weryfi- kacja kodu pod kątem standardów kodowania przy użyciu narzędzia PHP_CodeSniffer”), można je pobrać z pliku i zamienić w prawdziwą dokumentację. Oto przykładowa klasa zawierająca wszystkie niezbędne komentarze: /** * klasa Robot * * PHP Version 5 * * @category Example * @package Example * @author Lorna Mitchell lorna@lornajane.net * @copyright 2011 Sitepoint.com * @license PHP Version 3.0 {@link http://www.php.net/license/3_0.txt} * @link http://sitepoint.com */ /** * Robot * * PHP Version 5 * * @category Example * @package Example * @author Lorna Mitchell lorna@lornajane.net * @copyright 2011 Sitepoint.com * @license PHP Version 3.0 {@link http://www.php.net/license/3_0.txt} * @link http://sitepoint.com */ class Robot { protected $x = 0; protected $y = 0; /** * pobranie typowego komentarza tego znaku * * @return string komentarz */ public function getCatchPhrase() { return Oto ja, intelekt przewyĝszajÈcy... ; } /** * Przesuwa znak o losową liczbę znaków. * * @return logiczna wartość true */ public function dance() { $xmove = rand(-2, 2); $ymove = rand(-2, 2); if ($xmove != 0) { $this- x += $xmove; 246 Mistrz PHP. Pisz nowoczesny kod } if ($ymove != 0) { $this- y += $ymove; } return true; } } Większość środowisk programistycznych ma funkcję generowania szkieletu dokumentacji na podstawie deklaracji klas i metod, nazw parametrów itp. Później wystarczy tylko dodać brakujące informacje dotyczące przeznaczenia zmiennych, ich typów, postaci itd. Narzędzia wspomagające ten proces są bardzo pomocne, zatem nie masz żadnej wymówki, żeby się od ich używania wymigać! NarzÚdzie phpDocumentor Narzędzi do zamiany komentarzy na dokumenty jest wiele. Jednym z nich, mającym ugruntowa- ną pozycję w środowisku, jest program phpDocumentor4, który można zainstalować poprzez bibliotekę PEAR (więcej na ten temat piszemy w dodatku A). Aby wygenerować dokumentację dla naszego bardzo prostego projektu, instalujemy wymienione narzędzie, a następnie wpisujemy poniższe polecenie: phpdoc -t docs -o HTML:Smarty:PHP -d . Pierwsza część polecenia to oczywiście nazwa programu. Za nią znajduje się kilka przełączników. Opcja -t określa katalog, w którym ma zostać zapisany wynik, -o wyznacza szablon, według któ- rego ma zostać utworzona dokumentacja, a -d określa, gdzie znajduje się kod, dla którego ma zo- stać napisana dokumentacja — w tym przypadku jest to bieżący katalog. Po zakończeniu pracy programu można otworzyć stronę docs/index.html w przeglądarce internetowej (rysunek 8.1). Rysunek 8.1. Dokumentacja wygenerowana przez program phpDocumentor 4 http://www.phpdoc.org/. Zapisane w tym pliku pobrane z kodu informacje można przeglądać na kilka sposobów, np. według zawartości plików, jak na rysunku 8.2. KONTROLA JAKO¥CI 247 Rysunek 8.2. Widok zawartoĂci pliku w programie phpDocumentor Informacje można także wyświetlać według klas, jak na rysunku 8.3. Rysunek 8.3. Widok metod z klasy Robot Przedstawione przykłady wydają się niezbyt bogate w treść, ale gdyby do narzędzia tego wprowa- dzić jakiś większy program, od razu dałoby się dostrzec wiele szczegółów. Co ważne, nawet gdyby kod nie zawierał żadnych komentarzy, phpDocumentor i tak wygenerowałby informacje o klasach, nazwach metod itp. Dzięki temu narzędzie to można wprowadzić do procesu budowy, aby mieć zawsze dostępną dokumentację API programu, nad którym się pracuje — w trakcie dalszych prac można dodać komentarze dokumentacyjne. 248 Mistrz PHP. Pisz nowoczesny kod Program ten bardzo dobrze uzupełnia się z narzędziem PHP_CodeSniffer, które ostrzega o bra- kujących komentarzach. Początkowo komentarzy jest dużo, ale możliwość sprawdzenia stanu rzeczy bardzo motywuje cały zespół do pracy. Inne narzÚdzia dokumentacyjne Mimo że program phpDocumentor już od wielu lat jest standardowym narzędziem do tworzenia dokumentacji, nie uwzględniono w nim jeszcze nowości wprowadzonych w PHP 5.3. W celu za- pełnienia tej luki pojawiły się nowe narzędzia tego typu, ale żadne z nich nie jest jeszcze wystar- czająco dopracowane, aby można było je uznać za następcę starego programu. Ciekawie zapo- wiada się kilka projektów, np. DocBlox5 i najnowsza wersja narzędzia Doxygen6, warto więc się trochę rozejrzeć, bo może uda Ci się znaleźć coś, co będzie odpowiadać Twoim wymaganiom. Kontrola ěródïa Życzylibyśmy sobie, żeby w każdym projekcie był używany jakiś system kontroli kodu źródłowego, ale na wypadek gdybyś jeszcze niczego takiego nie używał albo był nowicjuszem w branży, w tym podrozdziale opisujemy wszystko od podstaw. Dowiesz się, dlaczego warto kontrolować kod źró- dłowy, jakie są dostępne narzędzia do robienia tego oraz jak utworzyć i skonfigurować repozyto- rium, aby odpowiadało Twoim potrzebom. Treść tej części rozdziału można ogólnie odnieść do wielu narzędzi tego typu, a przykłady tu prezentowane dotyczą systemów Subversion7 i Git8. Panowanie nad kodem źródłowym i innymi zasobami projektu to klucz do sukcesu programisty. W tym podrozdziale znajdziesz wszystkie informacje potrzebne do osiągnięcia tego sukcesu. Kontrola kodu źródłowego to nie tylko zapisywanie starszych wersji programu (chociaż to również się przydaje, gdy np. zauważysz, że zboczyłeś z kursu, albo klient stwierdzi, że poprzednia wersja programu bardziej mu się podobała). Dla każdej zmiany zapisywane są następujące informacje: „ kto dokonał zmiany, „ kiedy miało to miejsce, „ co dokładnie zmieniono, „ dlaczego to zrobiono9. Z systemu kontroli kodu źródłowego warto korzystać nawet, gdy pracuje się nad projektem w poje- dynkę, bez współpracy z innymi i bez tworzenia gałęzi. Repozytorium jest także centralnym ma- gazynem kodu. Można w nim przechowywać pliki z kodem, przenosić te pliki na inne komputery, robić kopie zapasowe, używać repozytorium jako mechanizmu wdrażania (więcej na ten temat pisze- my nieco dalej w tym rozdziale) i zawsze będzie wiadomo, że się pracuje na właściwej wersji kodu. 5 http://www.docblox-project.org/. 6 http://www.stack.nl/~dimitri/doxygen/index.html. 7 http://subversion.apache.org/. 8 http://git-scm.com/. 9 Chyba że zezwolisz na wiadomości zatwierdzania typu „Poprawione”, które nie są zbyt pomocne. KONTROLA JAKO¥CI 249 System kontroli kodu to także ważne narzędzie ułatwiające współpracę. Umożliwia bezproblemowe wprowadzanie wielu zmian i uwalnia członków zespołu od konieczności wypytywania wszystkich w biurze, kto ostatnio wprowadził jakieś zmiany w programie, albo nazywania katalogów inicjałami programistów, aby dwie osoby równocześnie nie wprowadzały modyfikacji w tym samym kodzie! Praca z centralnym systemem kontroli wersji W tekście pojawiło się kilka nowych słów, które mogą być niezrozumiałe, dlatego poniżej przed- stawiamy definicje kilku pojęć. repozytorium (ang. repository) zatwierdzenie zmian (ang. commit) pobranie kodu (ang. check out) kopia robocza (ang. working copy) Miejsce przechowywania kodu Zarejestrowanie stanu zmian Pobranie kodu z repozytorium, aby na nim pracować Kod pobrany z repozytorium Kod może być pobierany z repozytorium przez kilka osób jednocześnie. Każda z nich dokonuje w nim zmian, które następnie zatwierdza w repozytorium. Pozostałe osoby aktualizują kod, aby zachować wprowadzone zmiany w swoich kopiach roboczych. Relacje te przedstawiono na rysunku 8.4. Rysunek 8.4. Kopie robocze pobrane z centralnego repozytorium Czasami praca z systemem kontroli kodu może być trudna, zwłaszcza gdy członkowie zespołu nie mają na ten temat wystarczającej wiedzy. Wydaje się wówczas, że system, zamiast pomagać, tylko przeszkadza, a tak nie powinno być. Można jednak te kłopoty zminimalizować, postępując według prostych wskazówek. Oto kilka porad, które sformułowaliśmy na podstawie własnego doświadczenia: „ aktualizuj przed zatwierdzaniem; „ stosuj standardową konwencję nazywania projektów/gałęzi; „ często zatwierdzaj (przynajmniej raz dziennie) i często aktualizuj; „ przypominaj cały czas, kto nad czym pracuje (aby uniknąć dublowania pracy i konfliktów). Wszystko, co zostało do tej pory napisane, to tylko teoria. W następnym podrozdziale przedstawimy praktyczny przykład na podstawie systemu Subversion. Natomiast Git i systemy rozproszone opi- sujemy nieco dalej. 250 Mistrz PHP. Pisz nowoczesny kod Kontrola ěródïa przy uĝyciu systemu Subversion Większość organizacji wybiera do kontroli wersji oprogramowania system Subversion. Ostatnio można zaobserwować wzrost popularności systemów rozproszonych, ale wciąż jest miejsce dla prostych scentralizowanych narzędzi, zwłaszcza w zespołach, w których są młodzi programiści lub projektanci i większość osób pracuje w jednym miejscu lub w kilku miejscach. W każdym razie system Subversion i jego projekt mają się dobrze, a ich twórcy są gotowi na wszystko, aby dostar- czyć produkt najwyższej jakości. Przejrzymy polecenia, których najprawdopodobniej możesz potrzebować. Przede wszystkim musisz umieć pobrać kod (ang. check out), sprawdzić nowe zmiany oraz zatwierdzić własne zmiany (ang. commit): $ svn checkout svn://repo/project A project/hello.php Checked out revision 695. $ svn update A project/readme At revision 697. $ vim hello.php $ svn status M hello.php $ svn commit -m Fixed bug #42 by changing the wording Sending hello.php Transmitting file data . Committed revision 698. Najpierw pobraliśmy kod, aby mieć jego lokalną kopię roboczą. Jeśli chcesz ustawić jakieś opcje konfiguracyjne serwera, np. skonfigurować wirtualne hosty, powinieneś to zrobić właśnie teraz. Następne dwie czynności — aktualizacja i zatwierdzanie — są wykonywane wielokrotnie podczas pracy, a dodatkowo od czasu do czasu pobierane są zmiany od innych użytkowników. Po zakoń- czeniu pracy należy wykonać ostateczną aktualizację, aby dokonać synchronizacji z lokalnym re- pozytorium, a następnie zatwierdzić zmiany. Pozostali członkowie zespołu zobaczą Twoje zmiany, gdy dokonają u siebie aktualizacji. Tak wyglądają podstawowe zasady pracy. W ten sposób można zapanować nad kodem nawet w dużych zespołach programistycznych. Niestety, nie zawsze wszystko idzie tak dobrze! Jeśli dwie osoby dokonają zmian w tej samej części jakiegoś pliku, to Subversion nie będzie wiedział, która z tych zmian powinna być pierwsza, i poprosi o informację. W tym celu oznaczy plik jako konflikt (ang. conflict). Przypuśćmy, że mamy plik o nazwie hello.php zawierający następujący prosty kod: $greeting = Witaj, Ăwiecie ; echo $greeting; KONTROLA JAKO¥CI 251 Teraz zobaczmy, co się stanie, gdy dwie osoby dokonają zmian powodujących konflikt. Obaj pro- gramiści pobrali kod w wersji pokazanej powyżej. Następnie jeden z nich postanowił zmienić tekst powitania na mniej formalny: $greeting = CzeĂÊ, przyjacielu ; echo $greeting; Zmiana ta zostaje zatwierdzona w repozytorium w normalny sposób, ale w międzyczasie inny programista również wprowadził modyfikację, tak że kod wygląda teraz następująco: $message = Witaj, Ăwiecie ; echo $message; Próba zatwierdzenia zmian przez drugiego programistę nie powiedzie się, ponieważ jego pliki będą nie- aktualne. Gdy obaj programiści dokonają aktualizacji, zostaną poinformowani o konflikcie, ponieważ zarówno w wersji przychodzącej, jak i w lokalnej kopii roboczej zmodyfikowano ten sam wiersz kodu. Od Subversion 1.5 możliwe stało się interaktywne rozwiązywanie konfliktów, tzn. można edytować plik bezpośrednio podczas jego pobierania. Można także odłożyć zmiany na później i dokończyć aktualizację. W każdym razie w pliku zawierającym konflikty pojawi się następująca informacja: .mine $message = Witaj, Ăwiecie ; echo $message; ======= $greeting = CzeĂÊ, przyjacielu ; echo $greeting; .r699 Jeśli wykonasz w tym momencie polecenie svn status, zauważysz, że obok pliku hello.php znajduje się litera C oznaczająca, że wystąpił w nim konflikt. Ponadto pojawią się trzy nowe pliki: hello.php.mine, hello.php.r698 oraz hello.php.r699. Zawierają one odpowiednio: Twój kod w wer- sji sprzed wykonania polecenia svn update, wersję z repozytorium po ostatniej aktualizacji lub ostatnim pobraniu oraz najnowszą wersję kodu z repozytorium. Aby rozwiązać konflikt, należy otworzyć plik i ręcznie usunąć z niego informację o konflikcie, a na- stępnie nanieść w nim odpowiednie poprawki. Po doprowadzeniu kodu do odpowiedniego stanu należy poinformować system o tym fakcie, wysyłając polecenie resolved: svn resolved hello.php Spowoduje to usunięcie znacznika oznaczającego konflikt, a także dodatkowo utworzonych plików. Dopóki konflikt nie zostanie rozwiązany, w pliku nie można zatwierdzać żadnych nowych zmian. Konflikty i zespoïy Konfliktów nie da siÚ caïkiem wyelimino
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Mistrz PHP. Pisz nowoczesny kod
Autor:
, ,

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: