SlideShare une entreprise Scribd logo
1  sur  35
Télécharger pour lire hors ligne
IDZ DO
         PRZYK£ADOWY ROZDZIA£

                           SPIS TRE CI   PHP. Programowanie
                                         w systemie Windows
           KATALOG KSI¥¯EK
                                         Autor: Andrew Stopford
                      KATALOG ONLINE     T³umaczenie: Aleksandra Kula
                                         ISBN: 83-7197-915-0
       ZAMÓW DRUKOWANY KATALOG           Tytu³ orygina³u: PHP Programming for Windows
                                         Format: B5, stron: 290

              TWÓJ KOSZYK
                    DODAJ DO KOSZYKA     Ksi¹¿ka opisuje doskona³¹ platformê programistyczn¹ dla MS Windows. Opisuje ona
                                         PHP na tyle szczegó³owo, ¿e osoby zainteresowane mog¹ potraktowaæ j¹ jako
                                         podrêcznik tego jêzyka. Jej szczególn¹ zalet¹ jest wyczerpuj¹ce omówienie integracji
         CENNIK I INFORMACJE             PHP z technologiami Windows. Dziêki ksi¹¿ce dowiesz siê, jak tworzyæ i wykorzystywaæ
                                         obiekty COM w PHP, jak ³¹czyæ PHP z platform¹ .NET, jak korzystaæ z ActiveDirectory
                   ZAMÓW INFORMACJE      oraz jak u¿ywaæ MSXML.
                     O NOWO CIACH        „PHP. Programowanie w systemie Windows” zawiera równie¿ opis:
                                            • Instalacji PHP w systemie Windows
                       ZAMÓW CENNIK         • Konfigurowania i optymalizacji serwerów WWW
                                            • Jêzyka PHP i jego funkcji
                                            • £¹czenia PHP z bazami danych (Microsoft SQL Server, Oracle i MySQL)
                 CZYTELNIA                  • U¿ycia XML i XSLT w PHP
                                            • Integracji PHP z ASP przy u¿yciu WDDX
          FRAGMENTY KSI¥¯EK ONLINE          • Tworzenia us³ug WWW w PHP
                                         Je li planujesz u¿ywaæ PHP w systemach Windows, ksi¹¿ka ta stanie siê dla Ciebie
                                         nieocenion¹ pomoc¹. Gwarancjê dobrej jako ci stanowi równie¿ nazwisko autora.
                                         Andrew Stopford jest programist¹ z wieloletnim do wiadczeniem, cz³onkiem wielu
                                         zespo³ów pracuj¹cych nad projektami typu „open-source”, miêdzy innymi XML-RPC for
                                         ASP i NMatrix.




Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
5RKU VTG EK
             1 #WVQTG  
             9UVúR 
             9RTQYCFGPKG  
%ú è +      4QRQE[PCO[ RT[IQFú  2*2 
4QFKC    9RTQYCFGPKG FQ 2*2  
             Co to jest PHP? ......................................................................................................................18
             Jak powstał PHP?...................................................................................................................18
             Czym jest Open Source?........................................................................................................20
             Projektowanie w PHP a projektowanie wykorzystujące technologie ASP i ColdFusion?....20
             Kto odpowiada za dalszy rozwój PHP? .................................................................................21
             PHP dzisiaj.............................................................................................................................22
             Przyszłość PHP ......................................................................................................................22
             Podsumowanie .......................................................................................................................23
4QFKC    +PUVCNCELC K QRV[OCNKCELC 
             Planowanie instalacji PHP .....................................................................................................25
             Pobieranie PHP z witryny......................................................................................................26
             Instalowanie PHP...................................................................................................................28
             Optymalizowanie instalacji....................................................................................................44
             Rozwiązywanie problemów z instalacją................................................................................51
             Podsumowanie .......................................................................................................................51
%ú è ++     9RTQYCFGPKG FQ RTQITCOQYCPKC Y 2*2
4QFKC    2TQITCOQYCPKG Y 2*2  
             Narzędzia do tworzenia aplikacji w PHP ..............................................................................55
             Podstawy składni PHP ...........................................................................................................56
             Zmienne .................................................................................................................................57
             Operatory logiczne i pętle......................................................................................................68
             Tablice ...................................................................................................................................74
             Kod strukturalny i kod wielokrotnego u ytku .......................................................................80
             Podsumowanie .......................................................................................................................86
4QFKC    2*2 K RNKMK  
             Funkcje PHP obsługi plików i katalogów..............................................................................87
             PHP i pliki..............................................................................................................................87
             PHP i katalogi ........................................................................................................................97
             Podsumowanie .....................................................................................................................104
4QFKC    2*2 K UGULG  
             Sesje PHP.............................................................................................................................105
             PHP a sesje WDDX .............................................................................................................110
             Podsumowanie .....................................................................................................................120
2*2 2TQITCOQYCPKG Y U[UVGOKG 9KPFQYU


4QFKC            2*2 K DC[ FCP[EJ  
                     Metody PHP tworzenia zapytań do bazy danych ................................................................121
                     Współpraca z bazą danych...................................................................................................123
                     Przekazywanie zapytania do bazy z wykorzystaniem ODBC i PHP...................................123
                     Przesyłanie zapytania bezpośrednio do bazy z wykorzystaniem PHP ................................128
                     Podsumowanie .....................................................................................................................151
%ú è +++            CCYCPUQYCPG RTQITCOQYCPKG Y 2*2 
4QFKC            2*2 %1/ K 0'6  
                     Wszystko na temat technologii COM..................................................................................155
                     PHP i .NET ..........................................................................................................................163
                     Podsumowanie .....................................................................................................................169
4QFKC            2*2 K :/. 
                     Krótka historia XML-a ........................................................................................................171
                     Czym jest XML?..................................................................................................................172
                     Wyświetlanie dokumentów w języku XML ........................................................................173
                     Z czego składa się język XML?...........................................................................................173
                     Struktura języka XML .........................................................................................................177
                     Korzystanie z PHP i XML ...................................................................................................178
                     Formatowanie dokumentów XML za pomocą PHP i XSL .................................................186
                     Podsumowanie .....................................................................................................................190
4QFKC            2*2 K WU WIK 999  
                     Z czego składają się usługi WWW? ....................................................................................191
                     Przyszłość usług WWW ......................................................................................................199
                     Korzystanie z PHP do tworzenia usług WWW ...................................................................199
                     Podsumowanie .....................................................................................................................208
4QFKC  2*2 K #1 
                     Historia ADO.......................................................................................................................209
                     Czym jest ADO dla programisty PHP? ...............................................................................211
                     Instalowanie ADO ...............................................................................................................211
                     Współpraca pomiędzy PHP i ADO .....................................................................................211
                     ADODB i PHP.....................................................................................................................232
                     Podsumowanie .....................................................................................................................234
4QFKC  2*2 K #EVKXG KTGEVQT[  
                     Co to jest katalog X.500?.....................................................................................................235
                     Czym jest LDAP? ................................................................................................................236
                     Czym jest Active Directory?................................................................................................236
                     Korzystanie z Active Directory ...........................................................................................238
                     Korzystanie z PHP w połączeniu z Active Directory ..........................................................238
                     Podsumowanie .....................................................................................................................262
QFCVMK
QFCVGM #            6YQTGPKG RQ æEGPKC 1$%  
QFCVGM $            +PUVCNQYCPKG UGTYGTC 999  
5MQTQYKF
Rozdział 3.
2TQITCOQYCPKG Y 2*2
       Teraz, kiedy ju zainstalowałeś PHP, mo esz zacząć projektować aplikacje z jego wykorzy-
       staniem. W tym rozdziale dowiesz się, od czego zacząć, projektując aplikacje dla WWW,
       oraz zapoznasz się z ró nymi typami danych i strukturami składającymi się na język.


0CTúFKC FQ VYQTGPKC CRNKMCELK Y 2*2
       Zanim zaczniesz programować w PHP, potrzebny Ci będzie program do pisania, edy-
       towania i zapisywania skryptów. Mo esz korzystać z aplikacji Notatnik, jednak dostępne
       są równie inne programy oferujące takie funkcje jak podświetlanie składni kodu oraz
       testowanie i uruchamianie. Omówimy to w kolejnych punktach.


2*2 'FKV
       Edytor typu open-source, PHP Edit, oferuje podświetlanie kodu w ró nych kolorach, testo-
       wanie go oraz dostęp do dokumentacji funkcji oraz obiektów i inne.

       Więcej informacji, jak równie samo narzędzie, znajdziesz na stronie http://www.
       phpedit.com/.


/CETQOGFKC *QOG5KVG
       Macromedia HomeSite to edytor HTML obsługujący technologię ASP, ColdFusion i PHP.
       Obsługa kolorowego podświetlania poszczególnych elementów kodu jest wbudowaną
       funkcją HomeSite, ale dostęp do innych funkcji, takich jak dokumentacja składni, jest
       mo liwy jedynie przy wykorzystaniu narzędzi innych firm.

       Więcej informacji i testową wersję mo esz pobrać z witryny http://www.macromedia.com/
       software/homesite/.

       Dodatki do programu Macromedia HomeSite przeznaczone do programowania w PHP
       mo na pobrać ze strony http://www.wilk4.com/asp4hs/php4hs.htm.
%ú è ++   9RTQYCFGPKG FQ RTQITCOQYCPKC Y 2*2



#EVKXG5VCVG -QOQFQ
      Narzędzie dostępne jest zarówno dla platformy Windows, jak i Linux. ActiveState Ko-
      modo to popularny edytor. Obsługa PHP jest wbudowaną funkcją narzędzia umo liwia-
      jącą podświetlanie w ró nych kolorach składni oraz zdalne testowanie i uruchamianie kodu.

      Więcej informacji i testową wersję ActiveState Komodo mo na pobrać z http://www.
      activestate.com/Products/Komodo/.

GPF +'
      Zend IDE to narzędzie zbudowane w oparciu o język Java, które zawiera obsługę pod-
      świetlania w ró nych kolorach składni, jak równie rozbudowane funkcje zdalnego testo-
      wania i uruchamiania. Więcej informacji i testową wersję narzędzia znajdziesz na stronie
      http://www.zend.com/store/products/zend-ide.php.


2QFUVCY[ UM CFPK 2*2
      Podobnie jak ASP, PHP wykorzystuje coś, co osobiście nazywam „otwierająco-zamy-
      kającym nawiasem” (z ang. open-close bracket). W klasycznym ASP program rozpoczyna
      się od znacznika początku programu ( ), a kończy się znacznikiem końca programu ( ):
       
       4GURQPUGYTKVG
 -NCU[EP[ RTQITCO Y #52 


      Podobna sytuacja ma miejsce w przypadku PHP. Program rozpoczyna się od znacznika
      !RJR, a kończy ! :
       !RJR
       RTKPV
 2TQITCO Y 2*2 
       !

      PHP dopuszcza równie składnię dobrze znaną programistom tworzącym aplikacje urucha-
      miane po stronie klienta. Składnia ta rozpoczyna się poleceniem 5%4+26 .#0)7#)' RJR ,
      a kończy poleceniem 5%4+26 :
       5%4+26 .#0)7#)' RJR
       RTKPV
 VGUV 
       5%4+26

      Jeśli masz doświadczenie w projektowaniu w ASP, nie musisz się obawiać. PHP pozwala
      wykorzystywać składnię ASP:
       
       RTKPV
 2TQITCO Y 2*2 


      Aby jednak taka składnia była poprawna, musisz zmienić wpis w pliku php.ini:
       CURAVCIU  1P

      Ta zmienna ma domyślnie przypisaną wartość 1HH.
4QFKC     2TQITCOQYCPKG Y 2*2              



2TQITCO[ YKGNQNKPKQYG
          Wieloliniowe programy tworzone w PHP wymagają u ycia dodatkowego znaku:
            !RJR
            RTKPV
 6Q LGUV VYÎL RKGTYU[ 
            RTKPV
 RTQITCO Y 2*2 
            !

          Zauwa , e PHP wymaga u ycia operatora zamykającego linię ― znaku średnika ().
          Jeśli uruchomisz program, w którym nie ma znacznika końca linii, jak w poni ej przedsta-
          wionym przykładzie, pojawi się informacja o błędzie 2CTUG GTTQT 
D æF RTGVYCTCPKC:
            !RJR
            RTKPV
 6Q LGUV VYÎL RKGTYU[ 
            RTKPV
 RTQITCO Y 2*2 
            !

          Jeśli nigdy nie u ywałeś znaków końca linii, mo esz czasami o nich zapominać. Jeśli
          pojawi się wiadomość 2CTUG GTTQT podczas tworzenia aplikacji dla WWW, sprawdź, czy
          nie brakuje znaku końca linii w wierszu o numerze podanym przez komunikat o błędzie,
          jak pokazano na rysunku 3.1.

4[UWPGM 
Wiadomość
o błędzie Parse error




OKGPPG
          PHP jest określany jako język luźnych deklaracji. Oznacza to, e nie musisz deklarować
          typu zmiennych przed ich u yciem. PHP przypisuje w Twoim imieniu typy zmiennych.
          Aby to zrozumieć, przyjrzyj się następującemu przykładowi:
            !RJR
            PCUG V[R[ FCP[EJ
             KPVFCVC  
             FQWDNGFCVC  
             UVTKPIFCVC  #PFTGL 
             DQQNFCVC  647'

            RQFCL V[R[ FCP[EJ
             +PV6[RG  IGVV[RG
 KPVFCVC
            RTKPV
 OKGPPC KPVFCVC LGUV V[RW +PV6[RG$4 

             QWDNG6[RG  IGVV[RG
 FQWDNGFCVC
            RTKPV
 OKGPPC FQWDNGFCVC LGUV V[RW QWDNG6[RG$4
%ú è ++   9RTQYCFGPKG FQ RTQITCOQYCPKC Y 2*2


            5VTKPI6[RG  IGVV[RG
 UVTKPIFCVC
           RTKPV
 OKGPPC UVTKPIFCVC LGUV V[RW FCP[EJ 5VTKPI6[RG$4 

            $QQN6[RG  IGVV[RG
 DQQNFCVC
           RTKPV
 OKGPPC DQQNFCVC LGUV V[RW FCP[EJ $QQN6[RG$4 
           !

         Jeśli zapiszesz dane jako zmienną, PHP przypisuje typ zmiennej zgodnie z typem zapi-
         sanych w niej danych. Najpierw podaj, jakie dane będą przechowywane w zmiennej:
            KPVFCVCXCT  
            FQWDNGFCVCXCT  
            UVTKPIXCT  #PFTGL 
            DQQNXCT  647'

         PHP nadaje zmiennej typ odpowiadający danym zapisanym w zmiennej. Na przykład, po-
         niewa do zmiennej UVTKPIXCT przypisana jest wartość „Andrzej”, PHP nada tej zmiennej
         typ UVTKPI. Mo esz to sprawdzić, wyświetlając typ zmiennej za pomocą funkcji )GV6[RG:
            +PV6[RG  )GV6[RG
 KPVFCVCXCT

         Teraz mo esz wyświetlić wartość zmiennej i jej typ:
           RTKPV
 OKGPPC KPVFCVCXCT LGUV V[RW +PV6[RG$4 

         Jeśli uruchomisz ten skrypt, zobaczysz takie wyniki, jakie pokazano na rysunku 3.2.

4[UWPGM 
Typy danych w PHP




         Zwróć uwagę, e zmienna typu DQQNGCP jest wyświetlana jako . PHP wyświetla zmienne
         typu DQQNGCP jako , jeśli zmienna ma wartość 647', i jako PWNN (wartość pusta), jeśli zmien-
         na ma wartość (#.5'. Przyjrzymy się temu dokładniej w dalszej części tego rozdziału.

2T[RKU[YCPKG V[RÎY OKGPP[EJ
         Chocia luźne deklaracje mogą być przydatne w niektórych sytuacjach, czasem musisz
         podać typ danych wprost, na przykład przy przetwarzaniu danych pobranych z bazy da-
         nych. W tym celu musisz skorzystać z metody 5GV6[RG:
           !RJR

           PCUG V[R[ FCP[EJ
            KPVFCVC
4QFKC       2TQITCOQYCPKG Y 2*2        


  FQWDNGFCVC  

  UVTKPI  (CNUG 

  DQQN  647'

 Y[RKU V[R[ FCP[EJ
  +PV6[RG  IGVV[RG
 KPVFCVC
 RTKPV
 OKGPPC KPVFCVC LGUV V[RW +PV6[RG$4 

  QWDNG6[RG  IGVV[RG
 FQWDNGFCVC
 RTKPV
 OKGPPC FQWDNGFCVC LGUV V[RW QWDNG6[RG$4 

  5VTKPI6[RG  IGVV[RG
 UVTKPI
 RTKPV
 OKGPPC UVTKPI LGUV V[RW 5VTKPI6[RG$4 

  $QQN6[RG  IGVV[RG
 DQQN
 RTKPV
 OKGPPC DQQN LGUV V[RW $QQN6[RG$4 

 OKG V[R[ FCP[EJ
 5GV6[RG
 FQWDNGFCVC KPVGIGT 

 5GV6[RG
 KPVFCVC FQWDNG 

 5GV6[RG
 DQQN UVTKPI 

 5GV6[RG
 UVTKPI DQQNGCP 

 Y[ YKGVN PQYG V[R[ FCP[EJ
  +PV6[RG  IGVV[RG
 KPVFCVC
 RTKPV
 OKGPPC KPVFCVC LGUV VGTC V[RW +PV6[RG$4 

  QWDNG6[RG  IGVV[RG
 FQWDNGFCVC
 RTKPV
 OKGPPC FQWDNGFCVC LGUV VGTC V[RW QWDNG6[RG$4 

  5VTKPI6[RG  IGVV[RG
 UVTKPI
 RTKPV
 OKGPPC UVTKPI LGUV VGTC V[RW 5VTKPI6[RG$4 

  $QQN6[RG  IGVV[RG
 DQQN
 RTKPV
 OKGPPC DQQN LGUV VGTC V[RW $QQN6[RG$4 

 !

Podobnie jak w pierwszym przykładzie, przypisaliśmy zmiennym wartości i wyświetli-
liśmy zawartość tych zmiennych oraz ich typ:
  KPVFCVC  

  FQWDNGFCVC  

  UVTKPI  (CNUG 

  DQQN  647'

  +PV6[RG  IGVV[RG
 KPVFCVC
 RTKPV
 OKGPPC KPVFCVC LGUV V[RW +PV6[RG$4 

  QWDNG6[RG  IGVV[RG
 FQWDNGFCVC
 RTKPV
 OKGPPC FQWDNGFCVC LGUV V[RW QWDNG6[RG$4
%ú è ++      9RTQYCFGPKG FQ RTQITCOQYCPKC Y 2*2


             5VTKPI6[RG  IGVV[RG
 UVTKPI
            RTKPV
 OKGPPC UVTKPI LGUV V[RW 5VTKPI6[RG$4 

             $QQN6[RG  IGVV[RG
 DQQN
            RTKPV
 OKGPPC DQQN LGUV V[RW $QQN6[RG$4 

          Następnie mo liwa jest zmiana typu ka dej ze zmiennych za pomocą funkcji 5GV6[RG:
            5GV6[RG
    FQWDNGFCVC KPVGIGT 
            5GV6[RG
    KPVFCVC FQWDNG 
            5GV6[RG
    DQQN UVTKPI 
            5GV6[RG
    UVTKPI DQQNGCP 

          Jako argumenty funkcji 5GV6[RG podaj nazwę zmiennej, której typ chcesz zmienić (jak
          na przykład FQWDNGFCVC), a następnie typ danych, na który typ zmiennej ma zostać zmie-
          niony (na przykład KPVGIGT). Na końcu mo esz wyświetlić wartości i nowe typy zmiennych:
             +PV6[RG  IGVV[RG
 KPVFCVC
            RTKPV
 OKGPPC KPVFCVC LGUV V[RW +PV6[RG$4 

             QWDNG6[RG  IGVV[RG
 FQWDNGFCVC
            RTKPV
 OKGPPC FQWDNGFCVC LGUV V[RW QWDNG6[RG$4 

             5VTKPI6[RG  IGVV[RG
 UVTKPI
            RTKPV
 OKGPPC UVTKPI LGUV V[RW 5VTKPI6[RG$4 

             $QQN6[RG  IGVV[RG
 DQQN
            RTKPV
 OKGPPC DQQN LGUV V[RW $QQN6[RG$4 

          Jeśli uruchomisz ten skrypt, zobaczysz, e typy zmiennych zostały zmienione zgodnie
          z wydanymi poleceniami, jak pokazano na rysunku 3.3.

4[UWPGM 
Wykorzystanie funkcji
SetType do zmiany
typu zmiennej




          O ile zamiana zmiennych typu KPVGIGT i FQWDNG nie stanowiła większego problemu, to
          zamiana zmiennych typu DQQNGCP i UVTKPI była większym wyzwaniem. Wyświetlone wyniki
          pokazują, e zmienna typu UVTKPI ma wartość . Jest to zgodne z zasadami wyświetlania
          przez PHP zmiennych typu DQQNGCP, poniewa PHP wyświetla wartość 647' jako , dlatego
          po konwersji zmienna typu UVTKPI ma wartość .
4QFKC     2TQITCOQYCPKG Y 2*2              


          Jak widać, równie zmienna DQQNGCP ma wartość . Zmienna typu UVTKPI miała wartość
          (CNUG, lecz po konwersji na typ DQQNGCP zmienna nie była pusta i dlatego została uznana
          za zmienną o wartości 647' czyli . Aby po konwersji zmienna typu $QQNGCP miała war-
          tość (#.5', czyli , zmienna typu UVTKPI musiałaby przed konwersją mieć wartość 
          bądź być pusta:
            UVTKPI   

          Jeśli dokonamy takiej zmiany w naszym przykładzie, to widać (patrz rysunek 3.4), e
          wartość zmiennej typu DQQNGCP jest widoczna jako pusta zmienna. Pamiętaj, e PHP traktuje
          wartość  jako wartość (#.5' dla zmiennej typu DQQNGCP. Dlatego po konwersji zmiennej
          typu UVTKPI o wartości  do typu DQQNGCP zawartość zmiennej jest traktowana jako (#.5'.
          Nale y równie pamiętać, e PHP wyświetla zmienne typu DQQNGCP o wartości (CNUG jako
          zmienne puste. Stąd w naszym przykładzie została wyświetlona pusta zmienna.

4[UWPGM 
Dane zawierająca
zmienną typu boolean
o wartości False




4WVQYCPKG V[RÎY
          Rzutowanie typów to kolejny sposób przypisywania typów zmiennych.
           !RJR

            UQOGFCVC  

            PGYV[RG  )GV6[RG
 UQOGFCVC

           2TKPV
 OKGPPC UQOGFCVC OC RT[RKUCP[ V[R OKGPPGL    PGYV[RG QTC YCTVQ è
           å UQOGFCVC$4 $4 

           OKG PC V[R UVTKPI
            OKGPV[R  
UVTKPI UQOGFCVC

            PGYV[RG  )GV6[RG
 OKGPV[R

           2TKPV
 OKGPPC UQOGFCVC OC RT[RKUCP[ V[R OKGPPGL    PGYV[RG QTC YCTVQ è
           å OKGPV[R$4 

           OKG PC V[R KPVGIGT
            OKGPV[R  
KPVGIGT UQOGFCVC
%ú è ++   9RTQYCFGPKG FQ RTQITCOQYCPKC Y 2*2


            PGYV[RG  )GV6[RG
 OKGPV[R

           2TKPV
 OKGPPC UQOGFCVC OC RT[RKUCP[ V[R OKGPPGL   PGYV[RG QTC YCTVQ è
           å OKGPV[R$4 

           OKG PC V[R FQWDNG
            OKGPV[R  
FQWDNG UQOGFCVC

            PGYV[RG  )GV6[RG
 OKGPV[R

           2TKPV
 OKGPPC UQOGFCVC OC RT[RKUCP[ V[R OKGPPGL   PGYV[RG QTC YCTVQ è
           å OKGPV[R$4 

           OKG V[R PC DQQNGCP
            OKGPV[R  
DQQNGCP UQOGFCVC

            PGYV[RG  )GV6[RG
 OKGPV[R

           2TKPV
 OKGPPC UQOGFCVC OC RT[RKUCP[ V[R OKGPPGL   PGYV[RG QTC YCTVQ è
           å OKGPV[R$4 

           !

         Najpierw przypisz wartość zmiennej:
            UQOGFCVC  

         Wiadomo, e dla takiej wartości zmiennej, PHP ustawi typ zmiennej jako FQWDNG. Mo esz
         jednak zmienić ten typ. Jeśli chcesz zmienić typ zmiennej na UVTKPI, mo esz to zrobić za
         pomocą następującego polecenia:
            OKGPV[R  
UVTKPI UQOGFCVC

         Zmienna OKGPV[R przyjmuje wartość zmiennej UQOGFCVC, ale przypisywany jest jej
         typ UVTKPI. Takie rzutowanie typów jest mo liwe dla wszystkich typów zmiennych, jak
         widać na przedstawionym przykładzie. Po uruchomieniu skryptu przekonasz się, jak
         działa rzutowanie skryptów (pokazano to na rysunku 3.5).

4[UWPGM 
Rzutowanie typów
4QFKC     2TQITCOQYCPKG Y 2*2              


      W przedstawionym przykładzie widać, e wartość  została uznana przez PHP za typ
      FQWDNG. Po wykonaniu rzutowania typów, widoczne są zmiany wartości zmiennej w za-
      le ności od bie ącego typu zmiennej.


1RGTCVQT[ CT[VOGV[EPG
      PHP pozwala u ywać operatorów arytmetycznych na zgodnych typach zmiennych. Jakie
      to typy? Wszystkie przechowujące dane w formie numerycznej (oznacza to dowolny typ
      zmiennych z wyjątkiem typu DQQNGCP). W kolejnym przykładzie przedstawiony zostanie
      równie operator konkatenacji (połączenia ciągów). Nie martw się, jeśli nie jesteś zazna-
      jomiony z tą kwestią. Przyjrzymy się jej za moment:
       !RJR

       W [YCPG OKGPPG

        PWO  
        PWO  

       FQFCYCPKG
        UWOC  PWO 
 PWO
       2TKPV
 PWO  
  PWO             UWOC
       2TKPV
 $4 

       QFGLOQYCPKG
        TQPKEC  PWO  PWO

       2TKPV
 PWO         PWO        TQPKEC

       2TKPV
 $4 

       FKGNGPKG
        KNQTC  PWO  PWO

       2TKPV
 PWO         PWO        KNQTC

       2TKPV
 $4 

       OPQ GPKG
        KNQE[P  PWO
PWO

       2TKPV
 PWO
PWO        KNQE[P

       2TKPV
 $4 

       OQFWNQ
        OQFWNQ  PWO       PWO

       2TKPV
 PWO          PWO        OQFWNQ

       2TKPV
 $4 

       !
%ú è ++   9RTQYCFGPKG FQ RTQITCOQYCPKC Y 2*2


          Zaczynamy od przypisania wartości dwóch zmiennych, na których będziemy wykonywać
          operacje arytmetyczne:
            PWO  
            PWO  

          Następnie wykonujemy działanie arytmetyczne na tych zmiennych:
            UWOC  PWO 
 PWO

          W końcu wyświetlany jest wynik operacji:
           2TKPV
 PWO     
    PWO        UWOC

          Jeśli uruchomisz skrypt, wyświetlone zostaną wyniki operacji arytmetycznych pokazane
          na rysunku 3.6.

4[UWPGM 
Operacje arytmetyczne




          Warto nadmienić, e następująca deklaracja jest równie poprawna:
            PWO  
            PWO   

          W ten sposób utworzone zmienne będą ró nych typów. Zmienna PWO jest typu KPVGIGT,
          a zmienna PWO jest typu UVTKPI. Jeśli zmienisz wartości zmiennych zgodnie z poni szym
          przykładem, skrypt nadal będzie działał poprawnie:
            PWO  
            PWO  CC 

          Skrypt nadal będzie wykonany poprawnie, ale operatory arytmetyczne nie zadziałają.
          Jeśli PHP napotka dane innego typu ni numeryczne, zignoruje tę zmienną.

1RGTCVQT[ C EWEJQYG K HWPMELG
          PHP udostępnia kilka sposobów pracy na zmiennych łańcuchowych (UVTKPI). Często
          korzystasz ze zmiennych łańcuchowych pobranych z takiego źródła jak formularze HTML,
          pliki czy bazy danych, dlatego PHP umo liwia manipulowanie tymi danymi na ró ne
          sposoby.
4QFKC     2TQITCOQYCPKG Y 2*2           


Rozpoczniemy naszą pracę ze zmiennymi łańcuchowymi od zdefiniowania kilku zmiennych:
  KOKG  (QZ 
  URCELC      
  PCYKUMQ  /WNFGT 


 æEGPKG EKæIÎY
Aby połączyć zdefiniowane wcześniej ciągi, u yj operatora konkatenacji:
  KOKGAPCYKUMQ  KOKG  URCELC  PCYKUMQ

Utworzyłeś nową zmienną łańcuchową przez połączenie trzech ciągów. Zauwa , e do
łączenia łańcuchów słu y znak kropki ().

 WIQ è EKæIW
Aby poznać długość nowego ciągu, u yj funkcji UVTNGP:
  FNWIQUEAEKCIW  UVTNGP
 KOKGAPCYKUMQ


QFCVMQYC URCELC
PHP umo liwia usuwanie dodatkowego znaku spacji (często zwanego równie „białą
spacją”) znajdującego się na końcu lub na początku łańcucha znaków. Poniewa nasz
nowy łańcuch nie kończy się ani nie zaczyna „białą spacją”, musimy ją najpierw dodać,
aby następnie u yć tych funkcji:
  KOKGAPCYKUMQAKAURCELG    KOKGAPCYKUMQ 

Teraz mo esz usunąć początkową spację za pomocą funkcji NVTKO:
  NVTKOAKOKGAPCYKUMQ  NVTKO
 KOKGAPCYKUMQAKAURCELG

„Białą spację” zarówno rozpoczynającą, jak i kończącą łańcuch znaków mo esz usunąć
za pomocą funkcji VTKO:
  VTKOAKOKGAPCYKUMQ  VTKO
 KOKGAPCYKUMQAKAURCELG


9KGNMQ è NKVGT
PHP pozwala zmienić wielkość wszystkich liter w łańcuchu na wielkie lub na małe. Aby
zmienić wszystkie litery w łańcuch na wielkie, u yj funkcji UVTVQWRRGT:
  KOKGAPCYKUMQAYKGNMKGNKVGT[  UVTVQWRRGT
 KOKGAPCYKUMQ

Funkcja UVTVQNQYGT słu y do zamiany wszystkich liter w łańcuchu na małe:
  KOKGAPCYKUMQAOCNGNKVGT[  UVTVQNQYGT
 KOKGAPCYKUMQ


2QF C EWEJ[ PCMÎY
PHP umo liwia wyszukanie lokalizacji, utworzenie oraz dodanie podłańcucha do łańcucha
znaków. Do utworzenia podłańcucha znaków słu y funkcja UWDUVT:
  RQFANCPEWEJ  UWDUVT
 KOKGAPCYKUMQ
%ú è ++   9RTQYCFGPKG FQ RTQITCOQYCPKC Y 2*2


     Jako argument podawany jest łańcuch znaków, z którego utworzony ma być podłańcuch
     (w naszym przypadku jest to łańcuch KOKGAPCYKUMQ), i pozycja w łańcuchu, od której
     podłańcuch ma się zaczynać (w naszym przykładzie podłańcuch ma się zaczynać od
     trzeciego znaku w łańcuchu).

     Mo esz odszukać lokalizację podłańcucha wewnątrz łańcucha za pomocą funkcji UVTRQU:
       RQ[ELCARQFNCPEWEJ  UVTRQU
 KOKGAPCYKUMQ RQFANCPEWEJ

     Argumentami tej funkcji jest łańcuch, wewnątrz którego podłańcuch ma być wyszukany
     (u nas jest to łańcuch KOKGAPCYKUMQ), oraz wyszukiwany podłańcuch (jest to wcześniej
     utworzony podłańcuch RQFANCPEWEJ).

     Mo esz równie zamienić wybrany podłańcuch na inny we wskazanym łańcuchu za pomocą
     funkcji UVTATGRNCEG:
       RQFAKOKGAPCYKUMQ  UVTATGRNCEG
 (QZ  5EWNN[  KOKGAPCYKUMQ

     Argumentem funkcji UVTATGRNCEG jest łańcuch, który ma być wyszukany (w naszym przy-
     padku jest to (QZ ), łańcuch, którym zostanie on zastąpiony (w naszym przykładzie jest
     to łańcuch 5EWNN[ ), oraz łańcuch, wewnątrz którego zamiana zostanie dokonana (w na-
     szym przykładzie jest to KOKGAPCYKUMQ).

     6GUVQYCPKG OGVQF QDU WIK C EWEJÎY

     Mo esz sprawdzić wszystkie opisane wcześniej metody za pomocą następującego skryptu:
      !RJR

       C EWEJ[
       KOKG  (QZ 
       URCELC    
       PCYKUMQ  /WNFGT 

       æEGPKG
       KOKGAPCYKUMQ  KOKG  URCELC  PCYKUMQ

      RTKPV
 KOKGAPCYKUMQ VQ PCU RQ æEQP[ C EWEJ 

      RTKPV
 $4 

      F WIQ è
       FNWIQUEANCPEWEJC  UVTNGP
 KOKGAPCYKUMQ

      RTKPV
  WIQ è RQ æEQPGIQ C EWEJC VQ FNWIQUEANCPEWEJC 

      RTKPV
 $4 

      FQFCVMQYC URCELC
       KOKGAPCYKUMQAKAURCELC    KOKGAPCYKUMQ 

      RTKPV
 C EWEJ  FQFCVMQY[OK PCMCOK URCELK VQ
KOKGAPCYKUMQAKAURCELC
RTKPV
 $4
4QFKC     2TQITCOQYCPKG Y 2*2          


  NVTKOAKOKGAPCYKUMQ  NVTKO
 KOKGAPCYKUMQAKAURCELC

 RTKPV
 C EWEJ RQ WUWPKúEKW RQEæVMQYGL URCELK VQ
NVTKOAKOKGAPCYKUMQ
RTKPV
 $4 

  VTKOAKOKGAPCYKUMQ  VTKO
 KOKGAPCYKUMQAKAURCELC

 RTKPV
 C EWEJ RQ WUWPKúEKW MQ EæEGL URCELK VQ
VTKOAKOKGAPCYKUMQ
RTKPV
 $4 

 YKGNMQ è NKVGT
  KOKGAPCYKUMQAYKGNMKGNKVGT[  UVTVQWRRGT
 KOKGAPCYKUMQ

 RTKPV
 C EWEJ RKUCP[ YKGNMKOK NKVGTCOK VQ KOKGAPCYKUMQAYKGNMKGNKVGT[ 

 RTKPV
 $4 

  KOKGAPCYKUMQAOCNGNKVGT[  UVTVQNQYGT
 KOKGAPCYKUMQ

 RTKPV
 C EWEJ RKUCP[ OC [OK NKVGTCOK VQ KOKGAPCYKUMQAOCNGNKVGT[ 

 RTKPV
 $4 

 RQF C EWEJ[

 RQF C EWEJ
  RQFANCPEWEJ  UWDUVT
 KOKGAPCYKUMQ

 RTKPV
 2QF C EWEJ VQ RQFANCPEWEJ 

 RTKPV
 $4 

 RQ[ELC RQF C EWEJC
  RQFNCPEWEJARQ[ELC  UVTRQU
 KOKGAPCYKUMQ RQFANCPEWEJ

 RTKPV
 2Q[ELC RQF C EWEJC VQ RQFNCPEWEJARQ[ELC 

 RTKPV
 $4 

 RQFOKG RQF C EWEJ
  RQFAKOKGAPCYKUMQ  UVTATGRNCEG 
 (QZ  5EWNN[  KOKGAPCYKUMQ

 RTKPV
 2QFOKGPKQP[ C EWEJ VQ RQFAKOKGAPCYKUMQ 

 RTKPV
 $4 

 !

Jeśli uruchomisz powy szy skrypt, zobaczysz, jak działają metody obsługi łańcuchów,
co pokazano na rysunku 3.7. Zauwa , e wyświetlając wyniki działania metody konka-
tenacji, po obu stronach łańcucha umieściłem znaki
. Pozwala to pokazać znaki spacji
umieszczone pomiędzy tymi znakami a łańcuchem.
%ú è ++   9RTQYCFGPKG FQ RTQITCOQYCPKC Y 2*2


4[UWPGM 
Metody obsługi
łańcuchów




1RGTCVQT[ NQIKEPG K RúVNG
         Kontrolowanie działania programu jest niezwykle istotną kwestią. Być mo e musisz
         sprawdzić określone warunki logiczne lub wykonać pętlę po sprawdzeniu warunku.
         Takie elementy były zawsze obecne w językach programowania i w tym przypadku
         PHP nie jest wyjątkiem.


1RGTCVQT[ NQIKEPG
         W PHP istnieje kilka sposobów sprawdzania warunków logicznych. Sprawdzając waru-
         nek logiczny, porównujesz jedną wartość z inną wartością i sprawdzasz, czy są sobie równe:
           !RJR

            JCUNQ  CD 

           KH 
 JCUNQ  CD  ]
                RTKPV
 1FPCNGKQPQ JCU Q 
           _

           !

         Ten fragment kodu wykorzystuje instrukcję KH. Składnia tej instrukcji jest prosta. Jeśli
         wartość jest równa innej wartości, PHP zwraca wartość wyra enia jako „prawda”. W po-
         wy szym fragmencie kodu sprawdzamy, czy wartość zmiennej JCUNQ jest równa CD.
         Jeśli tak, to wyświetlany jest komunikat, jak pokazano na rysunku 3.8.

         Co by się stało, gdyby wartość zmiennej JCUNQ była ró na od podanej w warunku wartości?
         Poprzedni przykład nie wyświetliłby adnej wartości. Jednak za pomocą PHP równie
         mo esz wykonywać określone działania, jeśli warunek nie zostanie spełniony.
4QFKC     2TQITCOQYCPKG Y 2*2           


4[UWPGM 
Testowanie
prawdziwości
wyrażenia za pomocą
instrukcji if




           !RJR

            JCUNQ   

           KH
 JCUNQ  CD  ]
              RTKPV 
 1FPCNGKQPQ JCU Q 

           _ GNUG ]
              RTKPV
 0KG QFPCNGKQPQ JCU C 
           _

           !

         Jeśli wartości, której szukasz, nie odnaleziono, wykonane zostanie działanie zdefinio-
         wane po instrukcji GNUG. Jeśli wartość zmiennej JCUNQ jest równa podanej wartości, to
         wyświetlony zostanie komunikat 1FPCNGKQPQ JCU Q . Jeśli jednak wartość zmiennej
         jest ró na od podanej wartości, to wyświetlony zostanie komunikat 0KG QFPCNGKQPQ
         JCU C . Nadanie zmiennej JCUNQ wartości innej ni podana w warunku powoduje wy-
         świetlenie komunikatu 0KG QFPCNGKQPQ JCU C , jak pokazano na rysunku 3.9.

4[UWPGM 
Sprawdzanie
nieprawdziwości
wyrażenia za pomocą
instrukcji if else




         Jeśli masz wiele warunków do sprawdzenia za pomocą instrukcji KH, mo esz to zrobić
         w następujący sposób:
           !RJR

            JCUNQ  DD 

           KH 
 JCUNQ  CC  ]
                RTKPV
 1FPCNGKQPQ JCU Q FNC W [VMQYPKMC ,CP 
           _
%ú è ++   9RTQYCFGPKG FQ RTQITCOQYCPKC Y 2*2


      KH 
 JCUNQ  DD  ]
           RTKPV
 1FPCNGKQPQ JCU Q FNC W [VMQYPKMC #NHTGF 
      _

      KH 
 JCUNQ  EE  ]
           RTKPV
 1FPCNGKQPQ JCU Q FNC W [VMQYPKMC ,CEGM 
      _

      !

     Największym problemem sprawia tutaj fakt, e PHP wykona wszystkie instrukcje KH,
     nawet jeśli pierwszy warunek zostanie spełniony. Aby tego uniknąć, mo esz wykorzystać
     zagnie d one instrukcje KH:
      !RJR

       JCUNQ  DD 

      +H
 JCUNQ  CC  ]
              2TKPV
 1FPCNGKQPQ JCU Q FNC W [VMQYPKMC ,CP 

      _ GNUG+H 
 JCUNQ  DD  ]
              2TKPV
 1FPCNGKQPQ JCU Q FNC W [VMQYPKMC #NHTGF 

      _ GNUG+H 
 JCUNQ  EE  ]
              2TKPV
 1FPCNGKQPQ JCU Q FNC W [VMQYPKMC ,CEGM 
      _

      !

     Jednak, jeśli utworzyłeś wiele zagnie d onych instrukcji KH, pisany przez Ciebie kod szybko
     stanie się nieczytelny. Lepszym sposobem będzie u ycie instrukcji UYKVEJ i ECUG:
      !

       JCUNQ  DD 

      UYKVEJ
 JCUNQ ]
                  ECUG CC 
                  2TKPV
 1FPCNGKQPQ JCU Q FNC W [VMQYPKMC ,CP 
                  DTGCM

                   ECUG DD 
                   2TKPV
 1FPCNGKQPQ JCU Q FNC W [VMQYPKMC #NHTGF 
                   DTGCM

                   ECUG EE 
                   2TKPV
 1FPCNGKQPQ JCU Q FNC W [VMQYPKMC ,CEGM 
                   DTGCM
      _

      !

     W tym przykładzie sprawdzana jest ka da wartość zmiennej JCUNQ w instrukcji ECUG.
     Jeśli odnaleziona zostanie pasująca wartość, wyświetlany jest komunikat o odnalezieniu
     hasła dla danego u ytkownika.
4QFKC     2TQITCOQYCPKG Y 2*2               


            Zauwa , e u yto instrukcji DTGCM, aby po odszukaniu odpowiedniej wartości przerwane
            zostało wykonywanie dalszych instrukcji wewnątrz instrukcji UYKVEJ. W przeciwnym
            razie instrukcja UYKVEJ byłaby wykonywana analogicznie jak wcześniej przedstawiona
            instrukcja KH, czyli sprawdzane zostałyby kolejno wszystkie warunki.


+VGTCELG
            PHP umo liwia wykonywanie w programie pętli na kilka sposobów. Wszystkie pętle
            pozwalają wykonywać serie poleceń, a do momentu, kiedy warunek wykonania pętli
            zostanie spełniony, na przykład licznik osiągnie określoną wartość. Pierwszą metodą
            jest pętla HQT:
              !RJR

              HQT 
 NKEPKM   NKEPKM   NKEPKM

 ]
                                          RTKPV
 NKEPKM 
                                          RTKPV
 $4 
              _

              !

            Pętla HQT składa się z następujących elementów:
                 Wartości rozpoczynającej pętlę ― w naszym przypadku jest to 1 ( NKEPKM  ).
                 Sposobu sprawdzania wartości. W tym przypadku, jeśli wartość zmiennej
                   wyniesie 10, pętla przestanie być wykonywana ( NKEPKM  ).
                 Sposobu zmiany wartości wewnątrz pętli. W naszym przykładzie wartość jest
                   zwiększana o jeden przy ka dym przebiegu pętli ( NKEPKM

).

            Dlatego pętla wyświetla liczby od 1 do 10 (rysunek 3.10).

4[UWPGM 
Inkrementacja
licznika pętli for
od 1 do 10




            Wewnątrz pętli HQT ma miejsce kilka wa nych zdarzeń. Pierwszym z nich jest testowa-
            nie warunku logicznego. W naszym przykładzie sprawdzaliśmy, czy wartość zmiennej
            jest równa lub mniejsza od 10. Mo esz równie sprawdzać inne warunki, jak pokazano
            w tabeli 3.1.
%ú è ++    9RTQYCFGPKG FQ RTQITCOQYCPKC Y 2*2


6CDGNC  Inne warunki

 Warunki           Znaczenie
                 równy
                  ró ny
                  mniejszy ni
                   większy ni
                  większy lub równy
                 mniejszy lub równy
                identyczny (równa wartość i taki sam typ)

            Mo esz u ywać tych warunków nie tylko w połączeniu z instrukcją HQT, ale z dowolną
            instrukcją, która sprawdza wartość warunku logicznego, na przykład z instrukcją KH.
            Przyjrzyj się, w jaki sposób w poprzednim przykładzie zmieniana jest wartość licznika
            podczas wykonywania pętli. Wartość licznika mo e być inkrementowana lub dekremen-
            towana. Dekrementowanie licznika będzie miało postać:
               NKEPKM

            Mo emy zmienić nasz przykład w następujący sposób:
              !RJR

              HQT 
 NKEPKM   NKEPKM  NKEPKM  ]
                        RTKPV
 NKEPKM
                        RTKPV
 $4 
              _

              !

            Po uruchomieniu tego skryptu pętla wykona odliczanie od 10 do 1, jak pokazano na
            rysunku 3.11.

4[UWPGM 
Dekrementacja
licznika w pętli for
od 10 do 1




            Innym sposobem wykonania pętli jest instrukcja YJKNG:
4QFKC     2TQITCOQYCPKG Y 2*2          


            !RJR

             NKEPKM  

            YJKNG 
 NKEPKM   ]
                       RTKPV
 NKEPKM 
                       RTKPV
 $4 
                        NKEPKM


            _

            !

           Na początku przypisywana jest wartość początkowa zmiennej NKEPKM ― w naszym
           przykładzie jest to 1:
             NKEPKM 

           Następnie wykonywana jest pętla do chwili, gdy wartość licznika osiągnie 10:
            YJKNG 
 NKEPKM   ]

           Podobnie jak w przypadku pętli HQT mo esz u yć ró nych operatorów porównania. We-
           wnątrz pętli wartość zmiennej NKEPKM jest inkrementowana:
             NKEPKM 


           Oczywiście mo esz równie zastosować podobną metodę jak w naszym drugim przy-
           kładzie z pętlą HQT — dekrementować wartość licznika. Po uruchomieniu skryptu pętla
           YJKNG odlicza od 1 do 10, jak pokazano na rysunku 3.12.

4[UWPGM 
Inkrementowana
pętla while odliczająca
od 1 do 10




           PHP umo liwia sterowanie wykonaniem pętli za pomocą instrukcji FQ YJKNG:
            !RJR

             NKEPKM  

            FQ ]
                      RTKPV
 NKEPKM 
                      RTKPV
 $4 
                       NKEPKM
%ú è ++   9RTQYCFGPKG FQ RTQITCOQYCPKC Y 2*2


             _ YJKNG 
 NKEPKM 

             !

           Przedstawiona pętla wygląda podobnie jak pętla YJKNG. Po uruchomieniu skryptu wykonane
           zostanie liczenie od 1 do 10, a następnie pętla zostanie zakończona. Czym się w takim
           razie ró ni od pętli YJKNG? Ró nica pomiędzy tymi pętlami polega na lokalizacji instrukcji
           YJKNG. W pętli FQ YJKNG wartość zmiennej licznika jest modyfikowana (w naszym przy-
           kładzie jest inkrementowana), a następnie wartość tej zmiennej jest sprawdzana. W pętli
           YJKNG wartość zmiennej jest testowana, a następnie zmieniana. Istotny jest moment zmiany
           licznika i moment jego sprawdzenia. Tutaj zmienna NKEPKM przy wartości 1 nigdy nie
           jest sprawdzana, poniewa przed sprawdzeniem jest inkrementowana do wartości 2.


6CDNKEG
           Tablica zapewnia uporządkowany sposób przechowywania danych, do których mo na
           się w prosty sposób odwoływać. Na rysunku 3.13 widać, e tablica wygląda jak talia
           numerowanych kart, a na ka dej karcie jest wydrukowana wartość. Na przykład karta 3
           ma nadrukowaną wartość L.

4[UWPGM 
Struktura tablicy



           Ka da karta w naszym przykładzie jest określana jako element tablicy. Wartość poszcze-
           gólnych elementów tablicy to wartość tablicy, a do ka dego elementu tablicy mo na się
           odwołać poprzez klucz. W PHP dostępnych jest kilka sposobów obsługi tablicy.
             !RJR

              YKCFQOQUE=?      *   
              YKCFQOQUE=?      '   
              YKCFQOQUE=?      .   
              YKCFQOQUE=?      .   
              YKCFQOQUE=?      1   

             YJKNG 
NKUV
 MNWE YCTVQUE  GCEJ 
 YKCFQOQUE ]
                         RTKPV
 YCTVQUE 
                         RTKPV
 MNWE VCDNKE[ MNWE TÎYPC UKú YCTVQ EK YCTVQUE 
                         RTKPV
 $4 
             _

             !

           Rozpoczynamy od utworzenia tablicy:
              YKCFQOQUE=?      *   
              YKCFQOQUE=?      '   
              YKCFQOQUE=?      .   
              YKCFQOQUE=?      .   
              YKCFQOQUE=?      1
4QFKC      2TQITCOQYCPKG Y 2*2              


Wykorzystywana jest zmienna typu CTTC[. Mówi o tym nawias kwadratowy umieszczony
za nazwą zmiennej. Zauwa , e tablica zaczyna się od pozycji 0; w PHP wszystkie tablice
zaczynają się od tej pozycji. W naszym przykładzie wartość elementu YKCFQOQUE=? jest
równa E. Teraz, kiedy utworzona została tablica, musisz mieć mo liwość dostępu do jej ele-
mentów. PHP umo liwia odwołanie do kolejnych elementów tablicy w następujący sposób:
 YJKNG 
NKUV
 MNWE YCTVQUE  GCEJ 
 YKCFQOQUE ]
             RTKPV
 YCTVQUE 
             RTKPV
 $4 
 _

Pętla YJKNG przechodzi przez kolejne elementy tablicy. Tablica jest dzielona na klucze
elementów i wartości elementów za pomocą instrukcji NKUV, a następnie instrukcja GCEJ
pobiera wartości kolejnych elementów tablicy. Wewnątrz pętli wyświetlane są kolejne
elementy tablicy:
 RTKPV
 MNWE VCDNKE[ MNWE TÎYPC UKú YCTVQ EK YCTVQUE 

Po uruchomieniu skryptu wyświetlone zostaną kolejne elementy tablicy.

Jako kluczy poszczególnych elementów tablicy nie musisz u ywać liczb. Mo esz u ywać
dowolnych wartości. Mo emy zmienić powy szy przykład, zastępując liczby literami:
 !RJR

  YKCFQOQUE=   #   ?      *   
  YKCFQOQUE=   $   ?      '   
  YKCFQOQUE=   %   ?      .   
  YKCFQOQUE=      ?      .   
  YKCFQOQUE=   '   ?      1   

 YJKNG 
NKUV
 MNWE YCTVQUE  GCEJ 
 YKCFQOQUE ]
             RTKPV
 YCTVQUE 
             RTKPV
 $4 
 _

 !

Mo esz równie wyszukiwać wartości w tablicy, posługując się kluczem elementu:
 !RJR

  YKCFQOQUE=   #   ?      *   
  YKCFQOQUE=   $   ?      '   
  YKCFQOQUE=   %   ?      .   
  YKCFQOQUE=      ?      .   
  YKCFQOQUE=   '   ?      1   

 YJKNG 
NKUV
 MNWE YCTVQUE  GCEJ 
 YKCFQOQUE ]
        KH
 MNWE  $ ]
             RTKPV
 'NGOGPV VCDNKE[ Q MNWEW MNWE OC YCTVQ è YCTVQUE 
        _
 _

 !

Powy szy kod wyszukuje element tablicy o kluczu B i wyświetla jego wartość, jak poka-
zano na rysunku 3.14.
%ú è ++   9RTQYCFGPKG FQ RTQITCOQYCPKC Y 2*2


4[UWPGM 
Wartość elementu
tablicy wyszukana
poprzez klucz tego
elementu




          PHP umo liwia równie tworzenie tablicy za pomocą instrukcji CTTC[:
            !

             YKCFQOQUE  CTTC[ 
 #    *  $      '  %       .        .  '      1 

            YJKNG 
NKUV 
 MNWE YCTVQUE  GCEJ 
 YKCFQOQUE ]
                              RTKPV
 MNWE VCDNKE[ MNWE TÎYPC UKú YCTVQ EK YCTVQUE 
                              RTKPV
 $4 
            _

            !

          Zmienna YKCFQOQUE zawiera tablicę utworzoną za pomocą instrukcji CTTC[. Instrukcja
          CTTC[ pozwala tworzyć tablicę przez podanie kolejnych kluczy elementów i ich wartości.
          Po uruchomieniu skryptu zobaczysz zawartość struktury utworzonej przez instrukcję
          CTTC[, jak pokazano na rysunku 3.15.

4[UWPGM 
Klucze i wartości
elementów tablicy
utworzonej przez
instrukcję array




          Instrukcja CTTC[ samodzielnie nadaje klucze kolejnym elementom tablicy, jeśli nie zostaną
          one osobno zdefiniowane:
            !

             YKCFQOQUE  CTTC[ 
 *  '  .  .  1 

            YJKNG 
NKUV 
 MNWE YCTVQUE  GCEJ 
 YKCFQOQUE ]
                          RTKPV
 MNWE VCDNKE[ MNWE TÎYPC UKú YCTVQ EK YCTVQUE 
                          RTKPV
 $4 
            _

            !
4QFKC       2TQITCOQYCPKG Y 2*2       


          W tym przykładzie podaliśmy jedynie wartości elementów tablicy tworzonej instrukcją
          CTTC[. Po uruchomieniu skryptu widać, e instrukcja CTTC[ samodzielnie nadała klucze
          kolejnym elementom tablicy (patrz rysunek 3.16).

4[UWPGM 
Klucze kolejnych
elementów tablicy
są automatycznie
tworzone przy użyciu
instrukcji array




5QTVQYCPKG VCDNKE[
          Zdarza się, e tablica zawiera nieuporządkowane elementy; wartości elementów i kluczy
          nie są umieszczone na kolejnych pozycjach tablicy i nale y je uporządkować. Tworzenie
          fragmentów kodu, który wykonuje porządkowanie tablicy mo e być bardzo czasochłonne
          (nawet, jeśli korzystamy z napisanych przez innych programistów fragmentów kodu).
          Na szczęście PHP zawiera zestaw instrukcji, które słu ą do tego celu.

          W kolejnych punktach omówimy cztery typy instrukcji UQTV przeznaczonej do sortowania
          tablicy według wartości elementów tablicy lub ich kluczy.

          (WPMELC UQTV

          Instrukcja UQTV pozwala posortować wartości elementów tablicy w porządku rosnącym:
            !RJR

            UQTVQYCPKG CYCTVQ EK VCDNKE[ Y RQTæFMW TQUPæE[O
             PWOGTMK  CTTC[ 
     

            PKGWRQTæFMQYCPG
            RTKPV
 PKGWRQTæFMQYCPC VCDNKEC $4 

            YJKNG 
NKUV 
 MNWE YCTVQUE  GCEJ 
 PWOGTMK ]
                        RTKPV
 'NGOGPV Q MNWEW MNWE OC YCTVQ è YCTVQUE 
                        RTKPV
 $4 
            _

            RTKPV 
 $4 

            WRQTæFMQYCPG
            RTKPV
 WRQTæFMQYCPC VCDNKEC $4 

            UQTV 
 PWOGTMK

Contenu connexe

En vedette

Prowadzenie list dystrybucyjnych
Prowadzenie list dystrybucyjnychProwadzenie list dystrybucyjnych
Prowadzenie list dystrybucyjnychWydawnictwo Helion
 
Access 2002. Tworzenie baz danych
Access 2002. Tworzenie baz danychAccess 2002. Tworzenie baz danych
Access 2002. Tworzenie baz danychWydawnictwo Helion
 
Programowanie obiektowe w Visual Basic .NET dla każdego
Programowanie obiektowe w Visual Basic .NET dla każdegoProgramowanie obiektowe w Visual Basic .NET dla każdego
Programowanie obiektowe w Visual Basic .NET dla każdegoWydawnictwo Helion
 
Asembler dla procesorów Intel. Vademecum profesjonalisty
Asembler dla procesorów Intel. Vademecum profesjonalistyAsembler dla procesorów Intel. Vademecum profesjonalisty
Asembler dla procesorów Intel. Vademecum profesjonalistyWydawnictwo Helion
 
Po prostu własny serwer internetowy
Po prostu własny serwer internetowyPo prostu własny serwer internetowy
Po prostu własny serwer internetowyWydawnictwo Helion
 

En vedette (8)

Prowadzenie list dystrybucyjnych
Prowadzenie list dystrybucyjnychProwadzenie list dystrybucyjnych
Prowadzenie list dystrybucyjnych
 
Tworzenie cyfrowego wideo
Tworzenie cyfrowego wideoTworzenie cyfrowego wideo
Tworzenie cyfrowego wideo
 
Po prostu Flash MX
Po prostu Flash MXPo prostu Flash MX
Po prostu Flash MX
 
Access 2002. Tworzenie baz danych
Access 2002. Tworzenie baz danychAccess 2002. Tworzenie baz danych
Access 2002. Tworzenie baz danych
 
Programowanie obiektowe w Visual Basic .NET dla każdego
Programowanie obiektowe w Visual Basic .NET dla każdegoProgramowanie obiektowe w Visual Basic .NET dla każdego
Programowanie obiektowe w Visual Basic .NET dla każdego
 
Asembler dla procesorów Intel. Vademecum profesjonalisty
Asembler dla procesorów Intel. Vademecum profesjonalistyAsembler dla procesorów Intel. Vademecum profesjonalisty
Asembler dla procesorów Intel. Vademecum profesjonalisty
 
MS Windows 2000 od środka
MS Windows 2000 od środkaMS Windows 2000 od środka
MS Windows 2000 od środka
 
Po prostu własny serwer internetowy
Po prostu własny serwer internetowyPo prostu własny serwer internetowy
Po prostu własny serwer internetowy
 

Similaire à PHP. Programowanie w systemie Windows. Vademecum profesjonalisty

PHP4. Zaawansowane programowanie
PHP4. Zaawansowane programowaniePHP4. Zaawansowane programowanie
PHP4. Zaawansowane programowanieWydawnictwo Helion
 
ASP.NET 3.5 dla programistów PHP
ASP.NET 3.5 dla programistów PHPASP.NET 3.5 dla programistów PHP
ASP.NET 3.5 dla programistów PHPWydawnictwo Helion
 
PHP. Programowanie. Wydanie III
PHP. Programowanie. Wydanie IIIPHP. Programowanie. Wydanie III
PHP. Programowanie. Wydanie IIIWydawnictwo Helion
 
PHP5. Profesjonalne tworzenie oprogramowania
PHP5. Profesjonalne tworzenie oprogramowaniaPHP5. Profesjonalne tworzenie oprogramowania
PHP5. Profesjonalne tworzenie oprogramowaniaWydawnictwo Helion
 
PHP i MySQL. Dynamiczne strony WWW. Szybki start
PHP i MySQL. Dynamiczne strony WWW. Szybki startPHP i MySQL. Dynamiczne strony WWW. Szybki start
PHP i MySQL. Dynamiczne strony WWW. Szybki startWydawnictwo Helion
 
PHP i MySQL. Tworzenie stron WWW. Wydanie drugie. Vademecum profesjonalisty
PHP i MySQL. Tworzenie stron WWW. Wydanie drugie. Vademecum profesjonalistyPHP i MySQL. Tworzenie stron WWW. Wydanie drugie. Vademecum profesjonalisty
PHP i MySQL. Tworzenie stron WWW. Wydanie drugie. Vademecum profesjonalistyWydawnictwo Helion
 
PHP5. Zaawansowane programowanie
PHP5. Zaawansowane programowaniePHP5. Zaawansowane programowanie
PHP5. Zaawansowane programowanieWydawnictwo Helion
 
PHP. 101 praktycznych skryptów. Wydanie II
PHP. 101 praktycznych skryptów. Wydanie IIPHP. 101 praktycznych skryptów. Wydanie II
PHP. 101 praktycznych skryptów. Wydanie IIWydawnictwo Helion
 
PHP5. Obiekty, wzorce, narzędzia
PHP5. Obiekty, wzorce, narzędziaPHP5. Obiekty, wzorce, narzędzia
PHP5. Obiekty, wzorce, narzędziaWydawnictwo Helion
 
PHP, MySQL i Apache dla każdego. Wydanie II
PHP, MySQL i Apache dla każdego. Wydanie IIPHP, MySQL i Apache dla każdego. Wydanie II
PHP, MySQL i Apache dla każdego. Wydanie IIWydawnictwo Helion
 
Delphi 7. Ćwiczenia zaawansowane
Delphi 7. Ćwiczenia zaawansowaneDelphi 7. Ćwiczenia zaawansowane
Delphi 7. Ćwiczenia zaawansowaneWydawnictwo Helion
 
PHP, MySQL i Apache dla każdego. Wydanie III
PHP, MySQL i Apache dla każdego. Wydanie IIIPHP, MySQL i Apache dla każdego. Wydanie III
PHP, MySQL i Apache dla każdego. Wydanie IIIWydawnictwo Helion
 
Delphi dla .NET. Vademecum profesjonalisty
Delphi dla .NET. Vademecum profesjonalistyDelphi dla .NET. Vademecum profesjonalisty
Delphi dla .NET. Vademecum profesjonalistyWydawnictwo Helion
 
Delphi 8 .NET. Kompendium programisty
Delphi 8 .NET. Kompendium programistyDelphi 8 .NET. Kompendium programisty
Delphi 8 .NET. Kompendium programistyWydawnictwo Helion
 

Similaire à PHP. Programowanie w systemie Windows. Vademecum profesjonalisty (20)

Flash i PHP5. Podstawy
Flash i PHP5. PodstawyFlash i PHP5. Podstawy
Flash i PHP5. Podstawy
 
PHP4. Zaawansowane programowanie
PHP4. Zaawansowane programowaniePHP4. Zaawansowane programowanie
PHP4. Zaawansowane programowanie
 
ASP.NET 3.5 dla programistów PHP
ASP.NET 3.5 dla programistów PHPASP.NET 3.5 dla programistów PHP
ASP.NET 3.5 dla programistów PHP
 
PHP. Programowanie. Wydanie III
PHP. Programowanie. Wydanie IIIPHP. Programowanie. Wydanie III
PHP. Programowanie. Wydanie III
 
PHP5. Profesjonalne tworzenie oprogramowania
PHP5. Profesjonalne tworzenie oprogramowaniaPHP5. Profesjonalne tworzenie oprogramowania
PHP5. Profesjonalne tworzenie oprogramowania
 
PHP5. Księga eksperta
PHP5. Księga ekspertaPHP5. Księga eksperta
PHP5. Księga eksperta
 
PHP i MySQL. Dynamiczne strony WWW. Szybki start
PHP i MySQL. Dynamiczne strony WWW. Szybki startPHP i MySQL. Dynamiczne strony WWW. Szybki start
PHP i MySQL. Dynamiczne strony WWW. Szybki start
 
PHP. Praktyczne wprowadzenie
PHP. Praktyczne wprowadzeniePHP. Praktyczne wprowadzenie
PHP. Praktyczne wprowadzenie
 
PHP5. Radocha z programowania
PHP5. Radocha z programowaniaPHP5. Radocha z programowania
PHP5. Radocha z programowania
 
PHP i MySQL. Tworzenie stron WWW. Wydanie drugie. Vademecum profesjonalisty
PHP i MySQL. Tworzenie stron WWW. Wydanie drugie. Vademecum profesjonalistyPHP i MySQL. Tworzenie stron WWW. Wydanie drugie. Vademecum profesjonalisty
PHP i MySQL. Tworzenie stron WWW. Wydanie drugie. Vademecum profesjonalisty
 
PHP5. Zaawansowane programowanie
PHP5. Zaawansowane programowaniePHP5. Zaawansowane programowanie
PHP5. Zaawansowane programowanie
 
PHP. 101 praktycznych skryptów. Wydanie II
PHP. 101 praktycznych skryptów. Wydanie IIPHP. 101 praktycznych skryptów. Wydanie II
PHP. 101 praktycznych skryptów. Wydanie II
 
PHP w mgnieniu oka
PHP w mgnieniu okaPHP w mgnieniu oka
PHP w mgnieniu oka
 
PHP5. Tajniki programowania
PHP5. Tajniki programowaniaPHP5. Tajniki programowania
PHP5. Tajniki programowania
 
PHP5. Obiekty, wzorce, narzędzia
PHP5. Obiekty, wzorce, narzędziaPHP5. Obiekty, wzorce, narzędzia
PHP5. Obiekty, wzorce, narzędzia
 
PHP, MySQL i Apache dla każdego. Wydanie II
PHP, MySQL i Apache dla każdego. Wydanie IIPHP, MySQL i Apache dla każdego. Wydanie II
PHP, MySQL i Apache dla każdego. Wydanie II
 
Delphi 7. Ćwiczenia zaawansowane
Delphi 7. Ćwiczenia zaawansowaneDelphi 7. Ćwiczenia zaawansowane
Delphi 7. Ćwiczenia zaawansowane
 
PHP, MySQL i Apache dla każdego. Wydanie III
PHP, MySQL i Apache dla każdego. Wydanie IIIPHP, MySQL i Apache dla każdego. Wydanie III
PHP, MySQL i Apache dla każdego. Wydanie III
 
Delphi dla .NET. Vademecum profesjonalisty
Delphi dla .NET. Vademecum profesjonalistyDelphi dla .NET. Vademecum profesjonalisty
Delphi dla .NET. Vademecum profesjonalisty
 
Delphi 8 .NET. Kompendium programisty
Delphi 8 .NET. Kompendium programistyDelphi 8 .NET. Kompendium programisty
Delphi 8 .NET. Kompendium programisty
 

Plus de Wydawnictwo Helion

Tworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyTworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyWydawnictwo Helion
 
Blog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikBlog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikWydawnictwo Helion
 
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczneWydawnictwo Helion
 
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesieE-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesieWydawnictwo Helion
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsWydawnictwo Helion
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IIWydawnictwo Helion
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuWydawnictwo Helion
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIWydawnictwo Helion
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningWydawnictwo Helion
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykWydawnictwo Helion
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaWydawnictwo Helion
 

Plus de Wydawnictwo Helion (20)

Tworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyTworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. Projekty
 
Blog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikBlog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnik
 
Access w biurze i nie tylko
Access w biurze i nie tylkoAccess w biurze i nie tylko
Access w biurze i nie tylko
 
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
 
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesieE-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółu
 
Windows PowerShell. Podstawy
Windows PowerShell. PodstawyWindows PowerShell. Podstawy
Windows PowerShell. Podstawy
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie II
 
JavaScript. Pierwsze starcie
JavaScript. Pierwsze starcieJavaScript. Pierwsze starcie
JavaScript. Pierwsze starcie
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny trening
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktyk
 
Excel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktykExcel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktyk
 
Access 2007 PL. Seria praktyk
Access 2007 PL. Seria praktykAccess 2007 PL. Seria praktyk
Access 2007 PL. Seria praktyk
 
Word 2007 PL. Seria praktyk
Word 2007 PL. Seria praktykWord 2007 PL. Seria praktyk
Word 2007 PL. Seria praktyk
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacja
 
AutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PLAutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PL
 
Bazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcieBazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcie
 
Inventor. Pierwsze kroki
Inventor. Pierwsze krokiInventor. Pierwsze kroki
Inventor. Pierwsze kroki
 

PHP. Programowanie w systemie Windows. Vademecum profesjonalisty

  • 1. IDZ DO PRZYK£ADOWY ROZDZIA£ SPIS TRE CI PHP. Programowanie w systemie Windows KATALOG KSI¥¯EK Autor: Andrew Stopford KATALOG ONLINE T³umaczenie: Aleksandra Kula ISBN: 83-7197-915-0 ZAMÓW DRUKOWANY KATALOG Tytu³ orygina³u: PHP Programming for Windows Format: B5, stron: 290 TWÓJ KOSZYK DODAJ DO KOSZYKA Ksi¹¿ka opisuje doskona³¹ platformê programistyczn¹ dla MS Windows. Opisuje ona PHP na tyle szczegó³owo, ¿e osoby zainteresowane mog¹ potraktowaæ j¹ jako podrêcznik tego jêzyka. Jej szczególn¹ zalet¹ jest wyczerpuj¹ce omówienie integracji CENNIK I INFORMACJE PHP z technologiami Windows. Dziêki ksi¹¿ce dowiesz siê, jak tworzyæ i wykorzystywaæ obiekty COM w PHP, jak ³¹czyæ PHP z platform¹ .NET, jak korzystaæ z ActiveDirectory ZAMÓW INFORMACJE oraz jak u¿ywaæ MSXML. O NOWO CIACH „PHP. Programowanie w systemie Windows” zawiera równie¿ opis: • Instalacji PHP w systemie Windows ZAMÓW CENNIK • Konfigurowania i optymalizacji serwerów WWW • Jêzyka PHP i jego funkcji • £¹czenia PHP z bazami danych (Microsoft SQL Server, Oracle i MySQL) CZYTELNIA • U¿ycia XML i XSLT w PHP • Integracji PHP z ASP przy u¿yciu WDDX FRAGMENTY KSI¥¯EK ONLINE • Tworzenia us³ug WWW w PHP Je li planujesz u¿ywaæ PHP w systemach Windows, ksi¹¿ka ta stanie siê dla Ciebie nieocenion¹ pomoc¹. Gwarancjê dobrej jako ci stanowi równie¿ nazwisko autora. Andrew Stopford jest programist¹ z wieloletnim do wiadczeniem, cz³onkiem wielu zespo³ów pracuj¹cych nad projektami typu „open-source”, miêdzy innymi XML-RPC for ASP i NMatrix. Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: helion@helion.pl
  • 2. 5RKU VTG EK 1 #WVQTG 9UVúR 9RTQYCFGPKG %ú è + 4QRQE[PCO[ RT[IQFú 2*2 4QFKC 9RTQYCFGPKG FQ 2*2 Co to jest PHP? ......................................................................................................................18 Jak powstał PHP?...................................................................................................................18 Czym jest Open Source?........................................................................................................20 Projektowanie w PHP a projektowanie wykorzystujące technologie ASP i ColdFusion?....20 Kto odpowiada za dalszy rozwój PHP? .................................................................................21 PHP dzisiaj.............................................................................................................................22 Przyszłość PHP ......................................................................................................................22 Podsumowanie .......................................................................................................................23 4QFKC +PUVCNCELC K QRV[OCNKCELC Planowanie instalacji PHP .....................................................................................................25 Pobieranie PHP z witryny......................................................................................................26 Instalowanie PHP...................................................................................................................28 Optymalizowanie instalacji....................................................................................................44 Rozwiązywanie problemów z instalacją................................................................................51 Podsumowanie .......................................................................................................................51 %ú è ++ 9RTQYCFGPKG FQ RTQITCOQYCPKC Y 2*2 4QFKC 2TQITCOQYCPKG Y 2*2 Narzędzia do tworzenia aplikacji w PHP ..............................................................................55 Podstawy składni PHP ...........................................................................................................56 Zmienne .................................................................................................................................57 Operatory logiczne i pętle......................................................................................................68 Tablice ...................................................................................................................................74 Kod strukturalny i kod wielokrotnego u ytku .......................................................................80 Podsumowanie .......................................................................................................................86 4QFKC 2*2 K RNKMK Funkcje PHP obsługi plików i katalogów..............................................................................87 PHP i pliki..............................................................................................................................87 PHP i katalogi ........................................................................................................................97 Podsumowanie .....................................................................................................................104 4QFKC 2*2 K UGULG Sesje PHP.............................................................................................................................105 PHP a sesje WDDX .............................................................................................................110 Podsumowanie .....................................................................................................................120
  • 3. 2*2 2TQITCOQYCPKG Y U[UVGOKG 9KPFQYU 4QFKC 2*2 K DC[ FCP[EJ Metody PHP tworzenia zapytań do bazy danych ................................................................121 Współpraca z bazą danych...................................................................................................123 Przekazywanie zapytania do bazy z wykorzystaniem ODBC i PHP...................................123 Przesyłanie zapytania bezpośrednio do bazy z wykorzystaniem PHP ................................128 Podsumowanie .....................................................................................................................151 %ú è +++ CCYCPUQYCPG RTQITCOQYCPKG Y 2*2 4QFKC 2*2 %1/ K 0'6 Wszystko na temat technologii COM..................................................................................155 PHP i .NET ..........................................................................................................................163 Podsumowanie .....................................................................................................................169 4QFKC 2*2 K :/. Krótka historia XML-a ........................................................................................................171 Czym jest XML?..................................................................................................................172 Wyświetlanie dokumentów w języku XML ........................................................................173 Z czego składa się język XML?...........................................................................................173 Struktura języka XML .........................................................................................................177 Korzystanie z PHP i XML ...................................................................................................178 Formatowanie dokumentów XML za pomocą PHP i XSL .................................................186 Podsumowanie .....................................................................................................................190 4QFKC 2*2 K WU WIK 999 Z czego składają się usługi WWW? ....................................................................................191 Przyszłość usług WWW ......................................................................................................199 Korzystanie z PHP do tworzenia usług WWW ...................................................................199 Podsumowanie .....................................................................................................................208 4QFKC 2*2 K #1 Historia ADO.......................................................................................................................209 Czym jest ADO dla programisty PHP? ...............................................................................211 Instalowanie ADO ...............................................................................................................211 Współpraca pomiędzy PHP i ADO .....................................................................................211 ADODB i PHP.....................................................................................................................232 Podsumowanie .....................................................................................................................234 4QFKC 2*2 K #EVKXG KTGEVQT[ Co to jest katalog X.500?.....................................................................................................235 Czym jest LDAP? ................................................................................................................236 Czym jest Active Directory?................................................................................................236 Korzystanie z Active Directory ...........................................................................................238 Korzystanie z PHP w połączeniu z Active Directory ..........................................................238 Podsumowanie .....................................................................................................................262 QFCVMK QFCVGM # 6YQTGPKG RQ æEGPKC 1$% QFCVGM $ +PUVCNQYCPKG UGTYGTC 999 5MQTQYKF
  • 4. Rozdział 3. 2TQITCOQYCPKG Y 2*2 Teraz, kiedy ju zainstalowałeś PHP, mo esz zacząć projektować aplikacje z jego wykorzy- staniem. W tym rozdziale dowiesz się, od czego zacząć, projektując aplikacje dla WWW, oraz zapoznasz się z ró nymi typami danych i strukturami składającymi się na język. 0CTúFKC FQ VYQTGPKC CRNKMCELK Y 2*2 Zanim zaczniesz programować w PHP, potrzebny Ci będzie program do pisania, edy- towania i zapisywania skryptów. Mo esz korzystać z aplikacji Notatnik, jednak dostępne są równie inne programy oferujące takie funkcje jak podświetlanie składni kodu oraz testowanie i uruchamianie. Omówimy to w kolejnych punktach. 2*2 'FKV Edytor typu open-source, PHP Edit, oferuje podświetlanie kodu w ró nych kolorach, testo- wanie go oraz dostęp do dokumentacji funkcji oraz obiektów i inne. Więcej informacji, jak równie samo narzędzie, znajdziesz na stronie http://www. phpedit.com/. /CETQOGFKC *QOG5KVG Macromedia HomeSite to edytor HTML obsługujący technologię ASP, ColdFusion i PHP. Obsługa kolorowego podświetlania poszczególnych elementów kodu jest wbudowaną funkcją HomeSite, ale dostęp do innych funkcji, takich jak dokumentacja składni, jest mo liwy jedynie przy wykorzystaniu narzędzi innych firm. Więcej informacji i testową wersję mo esz pobrać z witryny http://www.macromedia.com/ software/homesite/. Dodatki do programu Macromedia HomeSite przeznaczone do programowania w PHP mo na pobrać ze strony http://www.wilk4.com/asp4hs/php4hs.htm.
  • 5. %ú è ++ 9RTQYCFGPKG FQ RTQITCOQYCPKC Y 2*2 #EVKXG5VCVG -QOQFQ Narzędzie dostępne jest zarówno dla platformy Windows, jak i Linux. ActiveState Ko- modo to popularny edytor. Obsługa PHP jest wbudowaną funkcją narzędzia umo liwia- jącą podświetlanie w ró nych kolorach składni oraz zdalne testowanie i uruchamianie kodu. Więcej informacji i testową wersję ActiveState Komodo mo na pobrać z http://www. activestate.com/Products/Komodo/. GPF +' Zend IDE to narzędzie zbudowane w oparciu o język Java, które zawiera obsługę pod- świetlania w ró nych kolorach składni, jak równie rozbudowane funkcje zdalnego testo- wania i uruchamiania. Więcej informacji i testową wersję narzędzia znajdziesz na stronie http://www.zend.com/store/products/zend-ide.php. 2QFUVCY[ UM CFPK 2*2 Podobnie jak ASP, PHP wykorzystuje coś, co osobiście nazywam „otwierająco-zamy- kającym nawiasem” (z ang. open-close bracket). W klasycznym ASP program rozpoczyna się od znacznika początku programu ( ), a kończy się znacznikiem końca programu ( ): 4GURQPUGYTKVG -NCU[EP[ RTQITCO Y #52 Podobna sytuacja ma miejsce w przypadku PHP. Program rozpoczyna się od znacznika !RJR, a kończy ! : !RJR RTKPV 2TQITCO Y 2*2 ! PHP dopuszcza równie składnię dobrze znaną programistom tworzącym aplikacje urucha- miane po stronie klienta. Składnia ta rozpoczyna się poleceniem 5%4+26 .#0)7#)' RJR , a kończy poleceniem 5%4+26 : 5%4+26 .#0)7#)' RJR RTKPV VGUV 5%4+26 Jeśli masz doświadczenie w projektowaniu w ASP, nie musisz się obawiać. PHP pozwala wykorzystywać składnię ASP: RTKPV 2TQITCO Y 2*2 Aby jednak taka składnia była poprawna, musisz zmienić wpis w pliku php.ini: CURAVCIU 1P Ta zmienna ma domyślnie przypisaną wartość 1HH.
  • 6. 4QFKC 2TQITCOQYCPKG Y 2*2 2TQITCO[ YKGNQNKPKQYG Wieloliniowe programy tworzone w PHP wymagają u ycia dodatkowego znaku: !RJR RTKPV 6Q LGUV VYÎL RKGTYU[ RTKPV RTQITCO Y 2*2 ! Zauwa , e PHP wymaga u ycia operatora zamykającego linię ― znaku średnika (). Jeśli uruchomisz program, w którym nie ma znacznika końca linii, jak w poni ej przedsta- wionym przykładzie, pojawi się informacja o błędzie 2CTUG GTTQT D æF RTGVYCTCPKC: !RJR RTKPV 6Q LGUV VYÎL RKGTYU[ RTKPV RTQITCO Y 2*2 ! Jeśli nigdy nie u ywałeś znaków końca linii, mo esz czasami o nich zapominać. Jeśli pojawi się wiadomość 2CTUG GTTQT podczas tworzenia aplikacji dla WWW, sprawdź, czy nie brakuje znaku końca linii w wierszu o numerze podanym przez komunikat o błędzie, jak pokazano na rysunku 3.1. 4[UWPGM Wiadomość o błędzie Parse error OKGPPG PHP jest określany jako język luźnych deklaracji. Oznacza to, e nie musisz deklarować typu zmiennych przed ich u yciem. PHP przypisuje w Twoim imieniu typy zmiennych. Aby to zrozumieć, przyjrzyj się następującemu przykładowi: !RJR PCUG V[R[ FCP[EJ KPVFCVC FQWDNGFCVC UVTKPIFCVC #PFTGL DQQNFCVC 647' RQFCL V[R[ FCP[EJ +PV6[RG IGVV[RG KPVFCVC RTKPV OKGPPC KPVFCVC LGUV V[RW +PV6[RG$4 QWDNG6[RG IGVV[RG FQWDNGFCVC RTKPV OKGPPC FQWDNGFCVC LGUV V[RW QWDNG6[RG$4
  • 7. %ú è ++ 9RTQYCFGPKG FQ RTQITCOQYCPKC Y 2*2 5VTKPI6[RG IGVV[RG UVTKPIFCVC RTKPV OKGPPC UVTKPIFCVC LGUV V[RW FCP[EJ 5VTKPI6[RG$4 $QQN6[RG IGVV[RG DQQNFCVC RTKPV OKGPPC DQQNFCVC LGUV V[RW FCP[EJ $QQN6[RG$4 ! Jeśli zapiszesz dane jako zmienną, PHP przypisuje typ zmiennej zgodnie z typem zapi- sanych w niej danych. Najpierw podaj, jakie dane będą przechowywane w zmiennej: KPVFCVCXCT FQWDNGFCVCXCT UVTKPIXCT #PFTGL DQQNXCT 647' PHP nadaje zmiennej typ odpowiadający danym zapisanym w zmiennej. Na przykład, po- niewa do zmiennej UVTKPIXCT przypisana jest wartość „Andrzej”, PHP nada tej zmiennej typ UVTKPI. Mo esz to sprawdzić, wyświetlając typ zmiennej za pomocą funkcji )GV6[RG: +PV6[RG )GV6[RG KPVFCVCXCT Teraz mo esz wyświetlić wartość zmiennej i jej typ: RTKPV OKGPPC KPVFCVCXCT LGUV V[RW +PV6[RG$4 Jeśli uruchomisz ten skrypt, zobaczysz takie wyniki, jakie pokazano na rysunku 3.2. 4[UWPGM Typy danych w PHP Zwróć uwagę, e zmienna typu DQQNGCP jest wyświetlana jako . PHP wyświetla zmienne typu DQQNGCP jako , jeśli zmienna ma wartość 647', i jako PWNN (wartość pusta), jeśli zmien- na ma wartość (#.5'. Przyjrzymy się temu dokładniej w dalszej części tego rozdziału. 2T[RKU[YCPKG V[RÎY OKGPP[EJ Chocia luźne deklaracje mogą być przydatne w niektórych sytuacjach, czasem musisz podać typ danych wprost, na przykład przy przetwarzaniu danych pobranych z bazy da- nych. W tym celu musisz skorzystać z metody 5GV6[RG: !RJR PCUG V[R[ FCP[EJ KPVFCVC
  • 8. 4QFKC 2TQITCOQYCPKG Y 2*2 FQWDNGFCVC UVTKPI (CNUG DQQN 647' Y[RKU V[R[ FCP[EJ +PV6[RG IGVV[RG KPVFCVC RTKPV OKGPPC KPVFCVC LGUV V[RW +PV6[RG$4 QWDNG6[RG IGVV[RG FQWDNGFCVC RTKPV OKGPPC FQWDNGFCVC LGUV V[RW QWDNG6[RG$4 5VTKPI6[RG IGVV[RG UVTKPI RTKPV OKGPPC UVTKPI LGUV V[RW 5VTKPI6[RG$4 $QQN6[RG IGVV[RG DQQN RTKPV OKGPPC DQQN LGUV V[RW $QQN6[RG$4 OKG V[R[ FCP[EJ 5GV6[RG FQWDNGFCVC KPVGIGT 5GV6[RG KPVFCVC FQWDNG 5GV6[RG DQQN UVTKPI 5GV6[RG UVTKPI DQQNGCP Y[ YKGVN PQYG V[R[ FCP[EJ +PV6[RG IGVV[RG KPVFCVC RTKPV OKGPPC KPVFCVC LGUV VGTC V[RW +PV6[RG$4 QWDNG6[RG IGVV[RG FQWDNGFCVC RTKPV OKGPPC FQWDNGFCVC LGUV VGTC V[RW QWDNG6[RG$4 5VTKPI6[RG IGVV[RG UVTKPI RTKPV OKGPPC UVTKPI LGUV VGTC V[RW 5VTKPI6[RG$4 $QQN6[RG IGVV[RG DQQN RTKPV OKGPPC DQQN LGUV VGTC V[RW $QQN6[RG$4 ! Podobnie jak w pierwszym przykładzie, przypisaliśmy zmiennym wartości i wyświetli- liśmy zawartość tych zmiennych oraz ich typ: KPVFCVC FQWDNGFCVC UVTKPI (CNUG DQQN 647' +PV6[RG IGVV[RG KPVFCVC RTKPV OKGPPC KPVFCVC LGUV V[RW +PV6[RG$4 QWDNG6[RG IGVV[RG FQWDNGFCVC RTKPV OKGPPC FQWDNGFCVC LGUV V[RW QWDNG6[RG$4
  • 9. %ú è ++ 9RTQYCFGPKG FQ RTQITCOQYCPKC Y 2*2 5VTKPI6[RG IGVV[RG UVTKPI RTKPV OKGPPC UVTKPI LGUV V[RW 5VTKPI6[RG$4 $QQN6[RG IGVV[RG DQQN RTKPV OKGPPC DQQN LGUV V[RW $QQN6[RG$4 Następnie mo liwa jest zmiana typu ka dej ze zmiennych za pomocą funkcji 5GV6[RG: 5GV6[RG FQWDNGFCVC KPVGIGT 5GV6[RG KPVFCVC FQWDNG 5GV6[RG DQQN UVTKPI 5GV6[RG UVTKPI DQQNGCP Jako argumenty funkcji 5GV6[RG podaj nazwę zmiennej, której typ chcesz zmienić (jak na przykład FQWDNGFCVC), a następnie typ danych, na który typ zmiennej ma zostać zmie- niony (na przykład KPVGIGT). Na końcu mo esz wyświetlić wartości i nowe typy zmiennych: +PV6[RG IGVV[RG KPVFCVC RTKPV OKGPPC KPVFCVC LGUV V[RW +PV6[RG$4 QWDNG6[RG IGVV[RG FQWDNGFCVC RTKPV OKGPPC FQWDNGFCVC LGUV V[RW QWDNG6[RG$4 5VTKPI6[RG IGVV[RG UVTKPI RTKPV OKGPPC UVTKPI LGUV V[RW 5VTKPI6[RG$4 $QQN6[RG IGVV[RG DQQN RTKPV OKGPPC DQQN LGUV V[RW $QQN6[RG$4 Jeśli uruchomisz ten skrypt, zobaczysz, e typy zmiennych zostały zmienione zgodnie z wydanymi poleceniami, jak pokazano na rysunku 3.3. 4[UWPGM Wykorzystanie funkcji SetType do zmiany typu zmiennej O ile zamiana zmiennych typu KPVGIGT i FQWDNG nie stanowiła większego problemu, to zamiana zmiennych typu DQQNGCP i UVTKPI była większym wyzwaniem. Wyświetlone wyniki pokazują, e zmienna typu UVTKPI ma wartość . Jest to zgodne z zasadami wyświetlania przez PHP zmiennych typu DQQNGCP, poniewa PHP wyświetla wartość 647' jako , dlatego po konwersji zmienna typu UVTKPI ma wartość .
  • 10. 4QFKC 2TQITCOQYCPKG Y 2*2 Jak widać, równie zmienna DQQNGCP ma wartość . Zmienna typu UVTKPI miała wartość (CNUG, lecz po konwersji na typ DQQNGCP zmienna nie była pusta i dlatego została uznana za zmienną o wartości 647' czyli . Aby po konwersji zmienna typu $QQNGCP miała war- tość (#.5', czyli , zmienna typu UVTKPI musiałaby przed konwersją mieć wartość bądź być pusta: UVTKPI Jeśli dokonamy takiej zmiany w naszym przykładzie, to widać (patrz rysunek 3.4), e wartość zmiennej typu DQQNGCP jest widoczna jako pusta zmienna. Pamiętaj, e PHP traktuje wartość jako wartość (#.5' dla zmiennej typu DQQNGCP. Dlatego po konwersji zmiennej typu UVTKPI o wartości do typu DQQNGCP zawartość zmiennej jest traktowana jako (#.5'. Nale y równie pamiętać, e PHP wyświetla zmienne typu DQQNGCP o wartości (CNUG jako zmienne puste. Stąd w naszym przykładzie została wyświetlona pusta zmienna. 4[UWPGM Dane zawierająca zmienną typu boolean o wartości False 4WVQYCPKG V[RÎY Rzutowanie typów to kolejny sposób przypisywania typów zmiennych. !RJR UQOGFCVC PGYV[RG )GV6[RG UQOGFCVC 2TKPV OKGPPC UQOGFCVC OC RT[RKUCP[ V[R OKGPPGL PGYV[RG QTC YCTVQ è å UQOGFCVC$4 $4 OKG PC V[R UVTKPI OKGPV[R UVTKPI UQOGFCVC PGYV[RG )GV6[RG OKGPV[R 2TKPV OKGPPC UQOGFCVC OC RT[RKUCP[ V[R OKGPPGL PGYV[RG QTC YCTVQ è å OKGPV[R$4 OKG PC V[R KPVGIGT OKGPV[R KPVGIGT UQOGFCVC
  • 11. %ú è ++ 9RTQYCFGPKG FQ RTQITCOQYCPKC Y 2*2 PGYV[RG )GV6[RG OKGPV[R 2TKPV OKGPPC UQOGFCVC OC RT[RKUCP[ V[R OKGPPGL PGYV[RG QTC YCTVQ è å OKGPV[R$4 OKG PC V[R FQWDNG OKGPV[R FQWDNG UQOGFCVC PGYV[RG )GV6[RG OKGPV[R 2TKPV OKGPPC UQOGFCVC OC RT[RKUCP[ V[R OKGPPGL PGYV[RG QTC YCTVQ è å OKGPV[R$4 OKG V[R PC DQQNGCP OKGPV[R DQQNGCP UQOGFCVC PGYV[RG )GV6[RG OKGPV[R 2TKPV OKGPPC UQOGFCVC OC RT[RKUCP[ V[R OKGPPGL PGYV[RG QTC YCTVQ è å OKGPV[R$4 ! Najpierw przypisz wartość zmiennej: UQOGFCVC Wiadomo, e dla takiej wartości zmiennej, PHP ustawi typ zmiennej jako FQWDNG. Mo esz jednak zmienić ten typ. Jeśli chcesz zmienić typ zmiennej na UVTKPI, mo esz to zrobić za pomocą następującego polecenia: OKGPV[R UVTKPI UQOGFCVC Zmienna OKGPV[R przyjmuje wartość zmiennej UQOGFCVC, ale przypisywany jest jej typ UVTKPI. Takie rzutowanie typów jest mo liwe dla wszystkich typów zmiennych, jak widać na przedstawionym przykładzie. Po uruchomieniu skryptu przekonasz się, jak działa rzutowanie skryptów (pokazano to na rysunku 3.5). 4[UWPGM Rzutowanie typów
  • 12. 4QFKC 2TQITCOQYCPKG Y 2*2 W przedstawionym przykładzie widać, e wartość została uznana przez PHP za typ FQWDNG. Po wykonaniu rzutowania typów, widoczne są zmiany wartości zmiennej w za- le ności od bie ącego typu zmiennej. 1RGTCVQT[ CT[VOGV[EPG PHP pozwala u ywać operatorów arytmetycznych na zgodnych typach zmiennych. Jakie to typy? Wszystkie przechowujące dane w formie numerycznej (oznacza to dowolny typ zmiennych z wyjątkiem typu DQQNGCP). W kolejnym przykładzie przedstawiony zostanie równie operator konkatenacji (połączenia ciągów). Nie martw się, jeśli nie jesteś zazna- jomiony z tą kwestią. Przyjrzymy się jej za moment: !RJR W [YCPG OKGPPG PWO PWO FQFCYCPKG UWOC PWO PWO 2TKPV PWO PWO UWOC 2TKPV $4 QFGLOQYCPKG TQPKEC PWO PWO 2TKPV PWO PWO TQPKEC 2TKPV $4 FKGNGPKG KNQTC PWO PWO 2TKPV PWO PWO KNQTC 2TKPV $4 OPQ GPKG KNQE[P PWO
  • 13. PWO 2TKPV PWO
  • 14. PWO KNQE[P 2TKPV $4 OQFWNQ OQFWNQ PWO PWO 2TKPV PWO PWO OQFWNQ 2TKPV $4 !
  • 15. %ú è ++ 9RTQYCFGPKG FQ RTQITCOQYCPKC Y 2*2 Zaczynamy od przypisania wartości dwóch zmiennych, na których będziemy wykonywać operacje arytmetyczne: PWO PWO Następnie wykonujemy działanie arytmetyczne na tych zmiennych: UWOC PWO PWO W końcu wyświetlany jest wynik operacji: 2TKPV PWO PWO UWOC Jeśli uruchomisz skrypt, wyświetlone zostaną wyniki operacji arytmetycznych pokazane na rysunku 3.6. 4[UWPGM Operacje arytmetyczne Warto nadmienić, e następująca deklaracja jest równie poprawna: PWO PWO W ten sposób utworzone zmienne będą ró nych typów. Zmienna PWO jest typu KPVGIGT, a zmienna PWO jest typu UVTKPI. Jeśli zmienisz wartości zmiennych zgodnie z poni szym przykładem, skrypt nadal będzie działał poprawnie: PWO PWO CC Skrypt nadal będzie wykonany poprawnie, ale operatory arytmetyczne nie zadziałają. Jeśli PHP napotka dane innego typu ni numeryczne, zignoruje tę zmienną. 1RGTCVQT[ C EWEJQYG K HWPMELG PHP udostępnia kilka sposobów pracy na zmiennych łańcuchowych (UVTKPI). Często korzystasz ze zmiennych łańcuchowych pobranych z takiego źródła jak formularze HTML, pliki czy bazy danych, dlatego PHP umo liwia manipulowanie tymi danymi na ró ne sposoby.
  • 16. 4QFKC 2TQITCOQYCPKG Y 2*2 Rozpoczniemy naszą pracę ze zmiennymi łańcuchowymi od zdefiniowania kilku zmiennych: KOKG (QZ URCELC PCYKUMQ /WNFGT æEGPKG EKæIÎY Aby połączyć zdefiniowane wcześniej ciągi, u yj operatora konkatenacji: KOKGAPCYKUMQ KOKG URCELC PCYKUMQ Utworzyłeś nową zmienną łańcuchową przez połączenie trzech ciągów. Zauwa , e do łączenia łańcuchów słu y znak kropki (). WIQ è EKæIW Aby poznać długość nowego ciągu, u yj funkcji UVTNGP: FNWIQUEAEKCIW UVTNGP KOKGAPCYKUMQ QFCVMQYC URCELC PHP umo liwia usuwanie dodatkowego znaku spacji (często zwanego równie „białą spacją”) znajdującego się na końcu lub na początku łańcucha znaków. Poniewa nasz nowy łańcuch nie kończy się ani nie zaczyna „białą spacją”, musimy ją najpierw dodać, aby następnie u yć tych funkcji: KOKGAPCYKUMQAKAURCELG KOKGAPCYKUMQ Teraz mo esz usunąć początkową spację za pomocą funkcji NVTKO: NVTKOAKOKGAPCYKUMQ NVTKO KOKGAPCYKUMQAKAURCELG „Białą spację” zarówno rozpoczynającą, jak i kończącą łańcuch znaków mo esz usunąć za pomocą funkcji VTKO: VTKOAKOKGAPCYKUMQ VTKO KOKGAPCYKUMQAKAURCELG 9KGNMQ è NKVGT PHP pozwala zmienić wielkość wszystkich liter w łańcuchu na wielkie lub na małe. Aby zmienić wszystkie litery w łańcuch na wielkie, u yj funkcji UVTVQWRRGT: KOKGAPCYKUMQAYKGNMKGNKVGT[ UVTVQWRRGT KOKGAPCYKUMQ Funkcja UVTVQNQYGT słu y do zamiany wszystkich liter w łańcuchu na małe: KOKGAPCYKUMQAOCNGNKVGT[ UVTVQNQYGT KOKGAPCYKUMQ 2QF C EWEJ[ PCMÎY PHP umo liwia wyszukanie lokalizacji, utworzenie oraz dodanie podłańcucha do łańcucha znaków. Do utworzenia podłańcucha znaków słu y funkcja UWDUVT: RQFANCPEWEJ UWDUVT KOKGAPCYKUMQ
  • 17. %ú è ++ 9RTQYCFGPKG FQ RTQITCOQYCPKC Y 2*2 Jako argument podawany jest łańcuch znaków, z którego utworzony ma być podłańcuch (w naszym przypadku jest to łańcuch KOKGAPCYKUMQ), i pozycja w łańcuchu, od której podłańcuch ma się zaczynać (w naszym przykładzie podłańcuch ma się zaczynać od trzeciego znaku w łańcuchu). Mo esz odszukać lokalizację podłańcucha wewnątrz łańcucha za pomocą funkcji UVTRQU: RQ[ELCARQFNCPEWEJ UVTRQU KOKGAPCYKUMQ RQFANCPEWEJ Argumentami tej funkcji jest łańcuch, wewnątrz którego podłańcuch ma być wyszukany (u nas jest to łańcuch KOKGAPCYKUMQ), oraz wyszukiwany podłańcuch (jest to wcześniej utworzony podłańcuch RQFANCPEWEJ). Mo esz równie zamienić wybrany podłańcuch na inny we wskazanym łańcuchu za pomocą funkcji UVTATGRNCEG: RQFAKOKGAPCYKUMQ UVTATGRNCEG (QZ 5EWNN[ KOKGAPCYKUMQ Argumentem funkcji UVTATGRNCEG jest łańcuch, który ma być wyszukany (w naszym przy- padku jest to (QZ ), łańcuch, którym zostanie on zastąpiony (w naszym przykładzie jest to łańcuch 5EWNN[ ), oraz łańcuch, wewnątrz którego zamiana zostanie dokonana (w na- szym przykładzie jest to KOKGAPCYKUMQ). 6GUVQYCPKG OGVQF QDU WIK C EWEJÎY Mo esz sprawdzić wszystkie opisane wcześniej metody za pomocą następującego skryptu: !RJR C EWEJ[ KOKG (QZ URCELC PCYKUMQ /WNFGT æEGPKG KOKGAPCYKUMQ KOKG URCELC PCYKUMQ RTKPV KOKGAPCYKUMQ VQ PCU RQ æEQP[ C EWEJ RTKPV $4 F WIQ è FNWIQUEANCPEWEJC UVTNGP KOKGAPCYKUMQ RTKPV WIQ è RQ æEQPGIQ C EWEJC VQ FNWIQUEANCPEWEJC RTKPV $4 FQFCVMQYC URCELC KOKGAPCYKUMQAKAURCELC KOKGAPCYKUMQ RTKPV C EWEJ FQFCVMQY[OK PCMCOK URCELK VQ
  • 20. 4QFKC 2TQITCOQYCPKG Y 2*2 NVTKOAKOKGAPCYKUMQ NVTKO KOKGAPCYKUMQAKAURCELC RTKPV C EWEJ RQ WUWPKúEKW RQEæVMQYGL URCELK VQ
  • 22. RTKPV $4 VTKOAKOKGAPCYKUMQ VTKO KOKGAPCYKUMQAKAURCELC RTKPV C EWEJ RQ WUWPKúEKW MQ EæEGL URCELK VQ
  • 24. RTKPV $4 YKGNMQ è NKVGT KOKGAPCYKUMQAYKGNMKGNKVGT[ UVTVQWRRGT KOKGAPCYKUMQ RTKPV C EWEJ RKUCP[ YKGNMKOK NKVGTCOK VQ KOKGAPCYKUMQAYKGNMKGNKVGT[ RTKPV $4 KOKGAPCYKUMQAOCNGNKVGT[ UVTVQNQYGT KOKGAPCYKUMQ RTKPV C EWEJ RKUCP[ OC [OK NKVGTCOK VQ KOKGAPCYKUMQAOCNGNKVGT[ RTKPV $4 RQF C EWEJ[ RQF C EWEJ RQFANCPEWEJ UWDUVT KOKGAPCYKUMQ RTKPV 2QF C EWEJ VQ RQFANCPEWEJ RTKPV $4 RQ[ELC RQF C EWEJC RQFNCPEWEJARQ[ELC UVTRQU KOKGAPCYKUMQ RQFANCPEWEJ RTKPV 2Q[ELC RQF C EWEJC VQ RQFNCPEWEJARQ[ELC RTKPV $4 RQFOKG RQF C EWEJ RQFAKOKGAPCYKUMQ UVTATGRNCEG (QZ 5EWNN[ KOKGAPCYKUMQ RTKPV 2QFOKGPKQP[ C EWEJ VQ RQFAKOKGAPCYKUMQ RTKPV $4 ! Jeśli uruchomisz powy szy skrypt, zobaczysz, jak działają metody obsługi łańcuchów, co pokazano na rysunku 3.7. Zauwa , e wyświetlając wyniki działania metody konka- tenacji, po obu stronach łańcucha umieściłem znaki
  • 25. . Pozwala to pokazać znaki spacji umieszczone pomiędzy tymi znakami a łańcuchem.
  • 26. %ú è ++ 9RTQYCFGPKG FQ RTQITCOQYCPKC Y 2*2 4[UWPGM Metody obsługi łańcuchów 1RGTCVQT[ NQIKEPG K RúVNG Kontrolowanie działania programu jest niezwykle istotną kwestią. Być mo e musisz sprawdzić określone warunki logiczne lub wykonać pętlę po sprawdzeniu warunku. Takie elementy były zawsze obecne w językach programowania i w tym przypadku PHP nie jest wyjątkiem. 1RGTCVQT[ NQIKEPG W PHP istnieje kilka sposobów sprawdzania warunków logicznych. Sprawdzając waru- nek logiczny, porównujesz jedną wartość z inną wartością i sprawdzasz, czy są sobie równe: !RJR JCUNQ CD KH JCUNQ CD ] RTKPV 1FPCNGKQPQ JCU Q _ ! Ten fragment kodu wykorzystuje instrukcję KH. Składnia tej instrukcji jest prosta. Jeśli wartość jest równa innej wartości, PHP zwraca wartość wyra enia jako „prawda”. W po- wy szym fragmencie kodu sprawdzamy, czy wartość zmiennej JCUNQ jest równa CD. Jeśli tak, to wyświetlany jest komunikat, jak pokazano na rysunku 3.8. Co by się stało, gdyby wartość zmiennej JCUNQ była ró na od podanej w warunku wartości? Poprzedni przykład nie wyświetliłby adnej wartości. Jednak za pomocą PHP równie mo esz wykonywać określone działania, jeśli warunek nie zostanie spełniony.
  • 27. 4QFKC 2TQITCOQYCPKG Y 2*2 4[UWPGM Testowanie prawdziwości wyrażenia za pomocą instrukcji if !RJR JCUNQ KH JCUNQ CD ] RTKPV 1FPCNGKQPQ JCU Q _ GNUG ] RTKPV 0KG QFPCNGKQPQ JCU C _ ! Jeśli wartości, której szukasz, nie odnaleziono, wykonane zostanie działanie zdefinio- wane po instrukcji GNUG. Jeśli wartość zmiennej JCUNQ jest równa podanej wartości, to wyświetlony zostanie komunikat 1FPCNGKQPQ JCU Q . Jeśli jednak wartość zmiennej jest ró na od podanej wartości, to wyświetlony zostanie komunikat 0KG QFPCNGKQPQ JCU C . Nadanie zmiennej JCUNQ wartości innej ni podana w warunku powoduje wy- świetlenie komunikatu 0KG QFPCNGKQPQ JCU C , jak pokazano na rysunku 3.9. 4[UWPGM Sprawdzanie nieprawdziwości wyrażenia za pomocą instrukcji if else Jeśli masz wiele warunków do sprawdzenia za pomocą instrukcji KH, mo esz to zrobić w następujący sposób: !RJR JCUNQ DD KH JCUNQ CC ] RTKPV 1FPCNGKQPQ JCU Q FNC W [VMQYPKMC ,CP _
  • 28. %ú è ++ 9RTQYCFGPKG FQ RTQITCOQYCPKC Y 2*2 KH JCUNQ DD ] RTKPV 1FPCNGKQPQ JCU Q FNC W [VMQYPKMC #NHTGF _ KH JCUNQ EE ] RTKPV 1FPCNGKQPQ JCU Q FNC W [VMQYPKMC ,CEGM _ ! Największym problemem sprawia tutaj fakt, e PHP wykona wszystkie instrukcje KH, nawet jeśli pierwszy warunek zostanie spełniony. Aby tego uniknąć, mo esz wykorzystać zagnie d one instrukcje KH: !RJR JCUNQ DD +H JCUNQ CC ] 2TKPV 1FPCNGKQPQ JCU Q FNC W [VMQYPKMC ,CP _ GNUG+H JCUNQ DD ] 2TKPV 1FPCNGKQPQ JCU Q FNC W [VMQYPKMC #NHTGF _ GNUG+H JCUNQ EE ] 2TKPV 1FPCNGKQPQ JCU Q FNC W [VMQYPKMC ,CEGM _ ! Jednak, jeśli utworzyłeś wiele zagnie d onych instrukcji KH, pisany przez Ciebie kod szybko stanie się nieczytelny. Lepszym sposobem będzie u ycie instrukcji UYKVEJ i ECUG: ! JCUNQ DD UYKVEJ JCUNQ ] ECUG CC 2TKPV 1FPCNGKQPQ JCU Q FNC W [VMQYPKMC ,CP DTGCM ECUG DD 2TKPV 1FPCNGKQPQ JCU Q FNC W [VMQYPKMC #NHTGF DTGCM ECUG EE 2TKPV 1FPCNGKQPQ JCU Q FNC W [VMQYPKMC ,CEGM DTGCM _ ! W tym przykładzie sprawdzana jest ka da wartość zmiennej JCUNQ w instrukcji ECUG. Jeśli odnaleziona zostanie pasująca wartość, wyświetlany jest komunikat o odnalezieniu hasła dla danego u ytkownika.
  • 29. 4QFKC 2TQITCOQYCPKG Y 2*2 Zauwa , e u yto instrukcji DTGCM, aby po odszukaniu odpowiedniej wartości przerwane zostało wykonywanie dalszych instrukcji wewnątrz instrukcji UYKVEJ. W przeciwnym razie instrukcja UYKVEJ byłaby wykonywana analogicznie jak wcześniej przedstawiona instrukcja KH, czyli sprawdzane zostałyby kolejno wszystkie warunki. +VGTCELG PHP umo liwia wykonywanie w programie pętli na kilka sposobów. Wszystkie pętle pozwalają wykonywać serie poleceń, a do momentu, kiedy warunek wykonania pętli zostanie spełniony, na przykład licznik osiągnie określoną wartość. Pierwszą metodą jest pętla HQT: !RJR HQT NKEPKM NKEPKM NKEPKM ] RTKPV NKEPKM RTKPV $4 _ ! Pętla HQT składa się z następujących elementów: Wartości rozpoczynającej pętlę ― w naszym przypadku jest to 1 ( NKEPKM ). Sposobu sprawdzania wartości. W tym przypadku, jeśli wartość zmiennej wyniesie 10, pętla przestanie być wykonywana ( NKEPKM ). Sposobu zmiany wartości wewnątrz pętli. W naszym przykładzie wartość jest zwiększana o jeden przy ka dym przebiegu pętli ( NKEPKM ). Dlatego pętla wyświetla liczby od 1 do 10 (rysunek 3.10). 4[UWPGM Inkrementacja licznika pętli for od 1 do 10 Wewnątrz pętli HQT ma miejsce kilka wa nych zdarzeń. Pierwszym z nich jest testowa- nie warunku logicznego. W naszym przykładzie sprawdzaliśmy, czy wartość zmiennej jest równa lub mniejsza od 10. Mo esz równie sprawdzać inne warunki, jak pokazano w tabeli 3.1.
  • 30. %ú è ++ 9RTQYCFGPKG FQ RTQITCOQYCPKC Y 2*2 6CDGNC Inne warunki Warunki Znaczenie równy ró ny mniejszy ni większy ni większy lub równy mniejszy lub równy identyczny (równa wartość i taki sam typ) Mo esz u ywać tych warunków nie tylko w połączeniu z instrukcją HQT, ale z dowolną instrukcją, która sprawdza wartość warunku logicznego, na przykład z instrukcją KH. Przyjrzyj się, w jaki sposób w poprzednim przykładzie zmieniana jest wartość licznika podczas wykonywania pętli. Wartość licznika mo e być inkrementowana lub dekremen- towana. Dekrementowanie licznika będzie miało postać: NKEPKM Mo emy zmienić nasz przykład w następujący sposób: !RJR HQT NKEPKM NKEPKM NKEPKM ] RTKPV NKEPKM RTKPV $4 _ ! Po uruchomieniu tego skryptu pętla wykona odliczanie od 10 do 1, jak pokazano na rysunku 3.11. 4[UWPGM Dekrementacja licznika w pętli for od 10 do 1 Innym sposobem wykonania pętli jest instrukcja YJKNG:
  • 31. 4QFKC 2TQITCOQYCPKG Y 2*2 !RJR NKEPKM YJKNG NKEPKM ] RTKPV NKEPKM RTKPV $4 NKEPKM _ ! Na początku przypisywana jest wartość początkowa zmiennej NKEPKM ― w naszym przykładzie jest to 1: NKEPKM Następnie wykonywana jest pętla do chwili, gdy wartość licznika osiągnie 10: YJKNG NKEPKM ] Podobnie jak w przypadku pętli HQT mo esz u yć ró nych operatorów porównania. We- wnątrz pętli wartość zmiennej NKEPKM jest inkrementowana: NKEPKM Oczywiście mo esz równie zastosować podobną metodę jak w naszym drugim przy- kładzie z pętlą HQT — dekrementować wartość licznika. Po uruchomieniu skryptu pętla YJKNG odlicza od 1 do 10, jak pokazano na rysunku 3.12. 4[UWPGM Inkrementowana pętla while odliczająca od 1 do 10 PHP umo liwia sterowanie wykonaniem pętli za pomocą instrukcji FQ YJKNG: !RJR NKEPKM FQ ] RTKPV NKEPKM RTKPV $4 NKEPKM
  • 32. %ú è ++ 9RTQYCFGPKG FQ RTQITCOQYCPKC Y 2*2 _ YJKNG NKEPKM ! Przedstawiona pętla wygląda podobnie jak pętla YJKNG. Po uruchomieniu skryptu wykonane zostanie liczenie od 1 do 10, a następnie pętla zostanie zakończona. Czym się w takim razie ró ni od pętli YJKNG? Ró nica pomiędzy tymi pętlami polega na lokalizacji instrukcji YJKNG. W pętli FQ YJKNG wartość zmiennej licznika jest modyfikowana (w naszym przy- kładzie jest inkrementowana), a następnie wartość tej zmiennej jest sprawdzana. W pętli YJKNG wartość zmiennej jest testowana, a następnie zmieniana. Istotny jest moment zmiany licznika i moment jego sprawdzenia. Tutaj zmienna NKEPKM przy wartości 1 nigdy nie jest sprawdzana, poniewa przed sprawdzeniem jest inkrementowana do wartości 2. 6CDNKEG Tablica zapewnia uporządkowany sposób przechowywania danych, do których mo na się w prosty sposób odwoływać. Na rysunku 3.13 widać, e tablica wygląda jak talia numerowanych kart, a na ka dej karcie jest wydrukowana wartość. Na przykład karta 3 ma nadrukowaną wartość L. 4[UWPGM Struktura tablicy Ka da karta w naszym przykładzie jest określana jako element tablicy. Wartość poszcze- gólnych elementów tablicy to wartość tablicy, a do ka dego elementu tablicy mo na się odwołać poprzez klucz. W PHP dostępnych jest kilka sposobów obsługi tablicy. !RJR YKCFQOQUE=? * YKCFQOQUE=? ' YKCFQOQUE=? . YKCFQOQUE=? . YKCFQOQUE=? 1 YJKNG NKUV MNWE YCTVQUE GCEJ YKCFQOQUE ] RTKPV YCTVQUE RTKPV MNWE VCDNKE[ MNWE TÎYPC UKú YCTVQ EK YCTVQUE RTKPV $4 _ ! Rozpoczynamy od utworzenia tablicy: YKCFQOQUE=? * YKCFQOQUE=? ' YKCFQOQUE=? . YKCFQOQUE=? . YKCFQOQUE=? 1
  • 33. 4QFKC 2TQITCOQYCPKG Y 2*2 Wykorzystywana jest zmienna typu CTTC[. Mówi o tym nawias kwadratowy umieszczony za nazwą zmiennej. Zauwa , e tablica zaczyna się od pozycji 0; w PHP wszystkie tablice zaczynają się od tej pozycji. W naszym przykładzie wartość elementu YKCFQOQUE=? jest równa E. Teraz, kiedy utworzona została tablica, musisz mieć mo liwość dostępu do jej ele- mentów. PHP umo liwia odwołanie do kolejnych elementów tablicy w następujący sposób: YJKNG NKUV MNWE YCTVQUE GCEJ YKCFQOQUE ] RTKPV YCTVQUE RTKPV $4 _ Pętla YJKNG przechodzi przez kolejne elementy tablicy. Tablica jest dzielona na klucze elementów i wartości elementów za pomocą instrukcji NKUV, a następnie instrukcja GCEJ pobiera wartości kolejnych elementów tablicy. Wewnątrz pętli wyświetlane są kolejne elementy tablicy: RTKPV MNWE VCDNKE[ MNWE TÎYPC UKú YCTVQ EK YCTVQUE Po uruchomieniu skryptu wyświetlone zostaną kolejne elementy tablicy. Jako kluczy poszczególnych elementów tablicy nie musisz u ywać liczb. Mo esz u ywać dowolnych wartości. Mo emy zmienić powy szy przykład, zastępując liczby literami: !RJR YKCFQOQUE= # ? * YKCFQOQUE= $ ? ' YKCFQOQUE= % ? . YKCFQOQUE= ? . YKCFQOQUE= ' ? 1 YJKNG NKUV MNWE YCTVQUE GCEJ YKCFQOQUE ] RTKPV YCTVQUE RTKPV $4 _ ! Mo esz równie wyszukiwać wartości w tablicy, posługując się kluczem elementu: !RJR YKCFQOQUE= # ? * YKCFQOQUE= $ ? ' YKCFQOQUE= % ? . YKCFQOQUE= ? . YKCFQOQUE= ' ? 1 YJKNG NKUV MNWE YCTVQUE GCEJ YKCFQOQUE ] KH MNWE $ ] RTKPV 'NGOGPV VCDNKE[ Q MNWEW MNWE OC YCTVQ è YCTVQUE _ _ ! Powy szy kod wyszukuje element tablicy o kluczu B i wyświetla jego wartość, jak poka- zano na rysunku 3.14.
  • 34. %ú è ++ 9RTQYCFGPKG FQ RTQITCOQYCPKC Y 2*2 4[UWPGM Wartość elementu tablicy wyszukana poprzez klucz tego elementu PHP umo liwia równie tworzenie tablicy za pomocą instrukcji CTTC[: ! YKCFQOQUE CTTC[ # * $ ' % . . ' 1 YJKNG NKUV MNWE YCTVQUE GCEJ YKCFQOQUE ] RTKPV MNWE VCDNKE[ MNWE TÎYPC UKú YCTVQ EK YCTVQUE RTKPV $4 _ ! Zmienna YKCFQOQUE zawiera tablicę utworzoną za pomocą instrukcji CTTC[. Instrukcja CTTC[ pozwala tworzyć tablicę przez podanie kolejnych kluczy elementów i ich wartości. Po uruchomieniu skryptu zobaczysz zawartość struktury utworzonej przez instrukcję CTTC[, jak pokazano na rysunku 3.15. 4[UWPGM Klucze i wartości elementów tablicy utworzonej przez instrukcję array Instrukcja CTTC[ samodzielnie nadaje klucze kolejnym elementom tablicy, jeśli nie zostaną one osobno zdefiniowane: ! YKCFQOQUE CTTC[ * ' . . 1 YJKNG NKUV MNWE YCTVQUE GCEJ YKCFQOQUE ] RTKPV MNWE VCDNKE[ MNWE TÎYPC UKú YCTVQ EK YCTVQUE RTKPV $4 _ !
  • 35. 4QFKC 2TQITCOQYCPKG Y 2*2 W tym przykładzie podaliśmy jedynie wartości elementów tablicy tworzonej instrukcją CTTC[. Po uruchomieniu skryptu widać, e instrukcja CTTC[ samodzielnie nadała klucze kolejnym elementom tablicy (patrz rysunek 3.16). 4[UWPGM Klucze kolejnych elementów tablicy są automatycznie tworzone przy użyciu instrukcji array 5QTVQYCPKG VCDNKE[ Zdarza się, e tablica zawiera nieuporządkowane elementy; wartości elementów i kluczy nie są umieszczone na kolejnych pozycjach tablicy i nale y je uporządkować. Tworzenie fragmentów kodu, który wykonuje porządkowanie tablicy mo e być bardzo czasochłonne (nawet, jeśli korzystamy z napisanych przez innych programistów fragmentów kodu). Na szczęście PHP zawiera zestaw instrukcji, które słu ą do tego celu. W kolejnych punktach omówimy cztery typy instrukcji UQTV przeznaczonej do sortowania tablicy według wartości elementów tablicy lub ich kluczy. (WPMELC UQTV Instrukcja UQTV pozwala posortować wartości elementów tablicy w porządku rosnącym: !RJR UQTVQYCPKG CYCTVQ EK VCDNKE[ Y RQTæFMW TQUPæE[O PWOGTMK CTTC[ PKGWRQTæFMQYCPG RTKPV PKGWRQTæFMQYCPC VCDNKEC $4 YJKNG NKUV MNWE YCTVQUE GCEJ PWOGTMK ] RTKPV 'NGOGPV Q MNWEW MNWE OC YCTVQ è YCTVQUE RTKPV $4 _ RTKPV $4 WRQTæFMQYCPG RTKPV WRQTæFMQYCPC VCDNKEC $4 UQTV PWOGTMK
  • 36. %ú è ++ 9RTQYCFGPKG FQ RTQITCOQYCPKC Y 2*2 YJKNG NKUV MNWE YCTVQUE GCEJ PWOGTMK ] RTKPV 'NGOGPV Q MNWEW MNWE OC YCTVQ è YCTVQUE RTKPV $4 _ ! Powy szy fragment kodu powoduje utworzenie tablicy za pomocą instrukcji CTTC[, która samodzielnie nadaje klucze kolejnym elementom tablicy. Następnie skrypt wyświetla zawartość nieuporządkowanej tablicy, porządkuje elementy tablicy i ponownie wyświetla zawartość tablicy, tym razem ju posortowaną. (WPMELC CUQTV Zauwa , e podczas sortowania tablicy przy u yciu instrukcji UQTV zmieniane są klucze elementów tablicy. Przed sortowaniem klucz 0 wskazywał wartość 5, natomiast po sor- towaniu ten sam klucz wskazywał wartość 1. Mo esz zachować pary klucz-wskazywany element, równocześnie porządkując rosnąco elementy tablicy. Jak? U yj funkcji CUQTV: !RJR UQTVQYCPKG CYCTVQ EK VCDNKE[ Y RQTæFMW TQUPæE[O CEJQYWLæE RT[RKUCPKC MNWE[ YKCFQOQUE CTTC[ # $ % ' PKGWRQTæFMQYCPG RTKPV PKGWRQTæFMQYCPC VCDNKEC $4 YJKNG NKUV MNWE YCTVQUE GCEJ YKCFQOQUE ] RTKPV 'NGOGPV Q MNWEW MNWE OC YCTVQ è YCTVQUE RTKPV $4 _ RTKPV $4 WRQTæFMQYCPG RTKPV WRQTæFMQYCPC VCDNKEC $4 CUQTV YKCFQOQUE YJKNG NKUV MNWE YCTVQUE GCEJ YKCFQOQUE ] RTKPV 'NGOGPV Q MNWEW MNWE OC YCTVQ è YCTVQUE RTKPV $4 _ ! W naszym kodzie podczas definiowania tablicy podawane są zarówno wartości elemen- tów, jak i ich klucze, jednak mo esz równie skorzystać z automatycznego nadawania kluczy przez wykorzystanie instrukcji CTTC[, podobnie jak w poprzednim przykładzie opisującym instrukcję UQTV. Następnie skrypt wyświetla zawartość nieuporządkowanej tablicy, sortuje elementy tablicy za pomocą instrukcji CUQTV i ponownie wyświetla za- wartość tablicy, jak pokazano na rysunku 3.17. Elementy tablicy zostały uporządkowane, ale powiązania pomiędzy kluczami i elemen- tami tablicy pozostały niezmienione. Na przykład klucz E wskazuje element tablicy o war- tość 4 przed i po sortowaniu.
  • 37. 4QFKC 2TQITCOQYCPKG Y 2*2 4[UWPGM Tablica posortowana w porządku rosnącym z wykorzystaniem instrukcji asort, która nie modyfikuje powiązań kluczy z elementami tablicy (WPMELC TUQTV Mo liwe jest równie posortowanie elementów tablicy w porządku malejącym za pomocą funkcji TUQTV: !RJR UQTVQYCPKG VCDNKE[ Y RQTæFMW OCNGLæE[O YKCFQOQUE CTTC[ PKGRQUQTVQYCPC RTKPV PKGRQUQTVQYCPC VCDNKEC$4 YJKNG NKUV MNWE YCTVQUE GCEJ YKCFQOQUE ] RTKPV 'NGOGPV Q MNWEW MNWE OC YCTVQ è YCTVQUE RTKPV $4 _ RTKPV $4 RQUQTVQYCPC RTKPV RQUQTVQYCPC VCDNKEC$4 TUQTV YKCFQOQUE YJKNG NKUV MNWE YCTVQUE GCEJ YKCFQOQUE ] RTKPV 'NGOGPV Q MNWEW MNWE OC YCTVQ è YCTVQUE RTKPV $4 _ ! Powy szy przykład działa analogiczne jak przykładowy skrypt opisujący funkcję UQTV. Funkcja TUQTV sortuje tablicę w porządku malejącym.
  • 38. %ú è ++ 9RTQYCFGPKG FQ RTQITCOQYCPKC Y 2*2 (WPMELC MUQTV PHP umo liwia sortowanie kluczy tablicy w porządku rosnącym za pomocą funkcji MUQTV: !RJR UQTVQYCPKG MNWE[ VCDNKE[ Y RQTæFMW TQUPæE[O YKCFQOQUE CTTC[ $ % # ' PKGWRQTæFMQYCPG RTKPV PKGWRQTæFMQYCPC VCDNKEC $4 YJKNG NKUV MNWE YCTVQUE GCEJ YKCFQOQUE ] RTKPV 'NGOGPV Q MNWEW MNWE OC YCTVQ è YCTVQUE RTKPV $4 _ RTKPV $4 WRQTæFMQYCPG MUQTV YKCFQOQUE RTKPV WRQTæFMQYCPC VCDNKEC $4 YJKNG NKUV MNWE YCTVQUE GCEJ YKCFQOQUE ] RTKPV 'NGOGPV Q MNWEW MNWE OC YCTVQ è YCTVQUE RTKPV $4 _ ! Powy szy skrypt wygląda analogiczne jak poprzednie przykłady, z tą ró nicą, e wyko- rzystuje instrukcję MUQTV do porządkowania tablicy. W tym przykładzie kluczami elementów tablicy są litery. Po posortowaniu za pomocą instrukcji MUQTV, klucze są sortowane w porządku alfabetycznym. -QF UVTWMVWTCNP[ K MQF YKGNQMTQVPGIQ W [VMW Moje pierwsze spotkanie z programowaniem miało miejsce na studiach. Moim nauczy- cielem był Chris Pickford, a był on jednym z najbardziej cierpliwych ludzi, jakich spo- tkałem w yciu. Chris dawał z siebie wszystko, próbując nauczyć grupę niedoświadczonych, ale bardzo chętnych, programistów podstaw i zalet programowania strukturalnego i nada- jącego się do wielokrotnego wykorzystania kodu. Dopiero kiedy zacząłem yć z progra- mowania zrozumiałem, jak wa ne było to, czego nauczył mnie Chris. Ten punkt dedykuję Tobie, Chris. Kod strukturalny i kod wielokrotnego u ytku pozwala rozbić program na uporządkowane fragmenty, w celu efektywnego wykorzystania fragmentów kodu wewnątrz aplikacji. Takie podejście jest korzystne, poniewa aplikacja mo e wielokrotnie wykonywać te same zadania, takie jak łączenie się z bazą danych, wystawianie zapytania do bazy danych
  • 39. 4QFKC 2TQITCOQYCPKG Y 2*2 i wyświetlanie danych otrzymanych z bazy danych. Podzielenie aplikacji na fragmenty pozwala zmniejszyć mo liwość wystąpienia błędów oraz skrócić czas tworzenia aplikacji (oszczędzanie czasu to zawsze wa na rzecz). PHP pozwala dzielić kod na kilka sposobów przy wykorzystaniu funkcji, klas i dołączanych bibliotek. -QT[UVCPKG HWPMELK Korzystanie z funkcji to jeden z najprostszych sposobów dzielenia kodu na fragmenty, które mogą być wielokrotnie wykorzystywane. !RJR HWPEVKQP 9KCFQOQUE2QYKVCNPC KOKG ] TGVWTP *GNNQ KOKG _ YTQV 9KCFQOQUE2QYKVCNPC #PFTGL RTKPV YTQV ! W powy szym przykładzie utworzona została funkcja wyświetlająca wiadomość. Do funkcji jako argument przesyłane jest imię, które następnie jest umieszczane jako część wyświetlanej wiadomości. Najpierw tworzona jest funkcja: HWPEVKQP 9KCFQOQUE2QYKVCNPC KOKG ] TGVWTP *GNNQ KOKG _ Zauwa , e wyniki wykonania funkcji są zwracane w następujący sposób: TGVWTP *GNNQ KOKG Innymi słowy, instrukcja TGVWTP zwraca wyniki wykonania funkcji po jej wywołaniu. Dlatego, aby pobrać wyniki wykonania funkcji, nale y zapisać je jako zmienną: YTQV 9KCFQOQUE2QYKVCNPC #PFTGL W końcu wyświetlane są wyniki wykonania funkcji: RTKPV YTQV Po uruchomieniu skryptu wyświetlone zostaną wyniki wywołania funkcji. 2TGMC[YCPKG FCP[EJ RTG OKGPPæ NWD RTG YCTVQ è Za pomocą funkcji mo na równie modyfikować zawartość przekazywanych do nich zmiennych. Przekazując zmienną do funkcji, mo esz zachować niezmienioną wartość zmiennej po zakończeniu wykonywania funkcji (nazywane jest to przekazywaniem przez wartość) lub zmienić dane (nazywamy to przekazywaniem przez zmienną). !RJR HWPEVKQP 9JQ+U%QQN CTIWOGPV ] CTIWOGPV Uæ EQQN
  • 40. %ú è ++ 9RTQYCFGPKG FQ RTQITCOQYCPKC Y 2*2 _ PCYC 2TQITCOK EK 2*2 RTG YCTVQ è 9JQ+U%QQN PCYC RTKPV PCYC PQYC NKPKC RTKPV $4 RTG OKGPPæ 9JQ+U%QQN PCYC RTKPV PCYC ! Powy szy kod modyfikuje zmienną PCYC. Najpierw zmiennej nadawana jest wartość: PCYC 2TQITCOK EK 2*2 Funkcja łączy łańcuch danych ze zmienną łańcuchową przekazywaną do funkcji: HWPEVKQP 9JQ+U%QQN CTIWOGPV ] CTIWOGPV Uæ EQQN _ Następnie wywoływana jest funkcja, do której argument jest przekazywany przez wartość i wyniki działania funkcji są wyświetlane. Zauwa , e w PHP argumenty do funkcji są domyślnie przekazywane przez wartość: 9JQ+U%QQN PCYC RTKPV PCYC Następnie ta sama funkcja jest wywoływana z przekazaniem argumentu przez zmienną, a wynik działania funkcji jest wyświetlany. 9JQ+U%QQN PCYC RTKPV PCYC Aby przekazać do funkcji argument przez zmienną, nale y dodać znak przed zmienną przekazywaną do funkcji (jak na przykład PCOG). Po uruchomieniu skryptu widać, e przy wywołaniu funkcji z przekazaniem argumentu przez wartość, wartość zmiennej łańcu- chowej pozostaje niezmieniona (patrz rysunek 3.18). Jednak przy przekazaniu argumentu przez zmienną, jej wartość jest zmieniana. 4[UWPGM Wyniki przekazania argumentu przez wartość i przez zmienną
  • 41. 4QFKC 2TQITCOQYCPKG Y 2*2 -QT[UVCPKG QDKGMVÎY PHP pozwala na rozbudowywanie i wielokrotne wykorzystanie napisanego fragmentu kodu w postaci obiektów. Obiekty PHP umo liwiają dzielenie kodu na segmenty, które w PHP są określane jako klasy. Jest to kolejny krok w kierunku strukturyzacji i wielo- krotnego wykorzystania kodu, poniewa umo liwia całkowite oddzielenie ró nych części aplikacji. Rozdzielając w ten sposób kod, programista ma pewność, e podczas testowania i uruchamiania segmentu kodu wszystkie potrzebne instrukcje i definicje znajdują się w jednej klasie. Jak, w takim razie, korzystać z obiektów w PHP? !RJR ENCUU OQLCMNCUC ] HWPEVKQP 9KCFQOQUE2QYKVCNPC CTIWOGPV] TGVWTP 9KVCL CTIWOGPV _ _ VYQTGPKG PQYGL MQRKK MNCU[ OQLQDKGMV PGY OQLCMNCUC Y[YQ CPKG HWPMELK 9KCFQOQUE2QYKVCNPC K CRKUCPKG Y[PKMW Y[MQPCPKC HWPMELK YTQV OQLQDKGMV 9KCFQOQUE2QYKVCNPC #PFTGL Y[ YKGVNGPKG Y[PKMÎY RTKPV YTQV ! Najpierw nale y zdefiniować klasę dla naszego obiektu: ENCUU OQLCMNCUC ] HWPEVKQP 9KCFQOQUE2QYKVCNPC CTIWOGPV] TGVWTP 9KVCL CTIWOGPV _ _ Nale y tutaj wspomnieć o kilku istotnych kwestiach. Po pierwsze, cały kod dotyczący klasy jest umieszczony wewnątrz nawiasów funkcji klasy. Po drugie, zauwa , e funkcja 9KCFQOQUE2QYKVCNPC u yta w poprzednich przykładach tego rozdziału, ponownie się pojawia. Nie ma obowiązku umieszczania definiowanych funkcji wewnątrz klasy, ale jest to naturalny krok, jeśli dą ysz do strukturyzacji kodu. Podobnie jak w poprzednich przykładach, funkcja 9KCFQOQUE2QYKVCNPC pobiera dane poprzez argument, dokleja dane do zmiennej i zwraca zmienną jako wynik działania. OQLQDKGMV PGY OQLCMNCUC W dalszej części tworzonego kodu mo esz wykorzystywać zdefiniowaną wcześniej klasę. W tym celu musisz najpierw stworzyć kopię obiektu i przypisać ją do zmiennej. W jakim celu? Jest to kolejny krok w kierunku wielokrotnego wykorzystania fragmentu kodu. Mo esz korzystać z tego samego obiektu, nadając mu ró ne wartości i uzyskując ró ne wyniki. Nie mo esz jednak u ywać tego samego obiektu, równocześnie nadając mu ró ne wartości, dlatego musisz utworzyć kilka kopii tego obiektu i u ywać tych kopii. W naszym przykładzie obiekt jest wykorzystywany tylko jeden raz, ale zasady składni pozostają niezmienione. Kopia obiektu jest przypisana do zmiennej OQLQDKGMV: YTQV OQLQDKGMV 9KCFQOQUE2QYKVCNPC #PFTGL
  • 42. %ú è ++ 9RTQYCFGPKG FQ RTQITCOQYCPKC Y 2*2 Teraz mo esz korzystać z obiektu. W PHP obowiązuje następująca składnia: -QRKC1DKGMVW 0CYC(WPMELK W tym przykładzie wywoływana jest funkcja 9KCFQOQUE2QYKVCNPC obiektu OQLCMNCUC. Po uruchomieniu skryptu pojawią się wyniki wywołania funkcji wewnątrz obiektu. Ten przykład jest raczej prosty. Aby przedstawić zalety wynikające z wykorzystania obiektów w PHP, musimy go rozbudować: !RJR ENCUU OQLCMNCUC ] XCT Y[UYKGVNCPCPCYC 9U[UE[ HWPEVKQP QFCL0CYG CTIWOGPV] VJKU Y[UYKGVNCPCPCYC CTIWOGPV _ HWPEVKQP 9KCFQOQUE2QYKVCNPC ] TGVWTP 9KVCL VJKU Y[UYKGVNCPCPCYC _ _ VYQTGPKG RKGTYUGL MQRKK MNCU[ OQLQDKGMV PGY OQLCMNCUC Y[YQ CPKG HWPMELK 9KCFQOQUE2QYKVCNPC K CRKUCPKG Y[PKMW Y[MQPCPKC HWPMELK YTQV OQLQDKGMV 9KCFQOQUE2QYKVCNPC Y[ YKGVNGPKG Y[PKMÎY RTKPV YTQV RTKPV $4 VYQTGPKG FTWIKGL MQRKK MNCU[ OQLQDKGMV PGY OQLCMNCUC OQLQDKGMV QFCL0CYG #PFTGL YTQV OQLQDKGMV 9KCFQOQUE2QYKVCNPC Y[ YKGVNGPKG Y[PKMÎY RTKPV YTQV ! W tym przypadku klasa składa się z kilku elementów: ENCUU OQLCMNCUC ] XCT Y[UYKGVNCPCPCYC 9U[UE[ HWPEVKQP QFCL0CYG CTIWOGPV] VJKU Y[UYKGVNCPCPCYC CTIWOGPV _ HWPEVKQP 9KCFQOQUE2QYKVCNPC ] TGVWTP 9KVCL VJKU Y[UYKGVNCPCPCYC _ _
  • 43. 4QFKC 2TQITCOQYCPKG Y 2*2 Najpierw zdefiniowano zmienną wewnątrz klasy. Na niej operuje kod znajdujący się wewnątrz definicji klasy i dlatego jest określana jako zmienna klasy. XCT Y[UYKGVNCPCPCYC 9U[UE[ Musisz zadeklarować zmienną klasy przy u yciu instrukcji XCT. Dzięki temu PHP „wie”, co jest zmienną, a co funkcją. W naszym przykładzie obiekt zawiera dwie funkcje: HWPEVKQP QFCL0CYG CTIWOGPV] VJKU Y[UYKGVNCPCPCYC CTIWOGPV _ HWPEVKQP 9KCFQOQUE2QYKVCNPC ] TGVWTP 9KVCL VJKU Y[UYKGVNCPCPCYC _ Pierwsza z nich pobiera argument i przypisuje zmiennej klasy wartość tego argumentu: HWPEVKQP QFCL0CYG CTIWOGPV] VJKU Y[UYKGVNCPCPCYC CTIWOGPV _ Zwróć uwagę na składnię przypisania zmiennej klasy: VJKU Y[UYKGVNCPCPCYC CTIWOGPV Odwołanie dotyczy zmiennej Y[UYKGVNCPCPCYC zdefiniowanej w bie ącej klasie. U ycie następującej składni gwarantuje, e odwołanie dotyczy zmiennej klasy i PHP nie pomyli jej z inną zmienną znajdującą się poza klasą. HWPMELC 9KCFQOQUE2QYKVCNPC ] TGVWTP 9KVCL VJKU Y[UYKGVNCPCPCYC _ Druga funkcja przekazuje wartość zmiennej klasy poza klasę. Kod wywołujący klasę spełnia dwa zadania. Najpierw tworzy kopię klasy i wyświetla wartość zmiennej klasy: OQLQDKGMV PGY OQLCMNCUC YTQV OQLQDKGMV 9KCFQOQUE2QYKVCNPC RTKPV YTQV Następnie tworzy kolejną kopię klasy i przekazuje wartość funkcji QFCL0CYG w celu przypisania wartości zmiennej klasy. Ostatnim krokiem jest wyświetlenie nowej wartości zmiennej klasy: OQLQDKGMV PGY OQLCMNCUC OQLQDKGMV QFCL0CYG #PFTGL YTQV OQLQDKGMV 9KCFQOQUE2QYKVCNPC Y[ YKGVNGPKG Y[PKMÎY RTKPV YTQV Po uruchomieniu skryptu zobaczysz wyniki wykonania dwóch części skryptu; w pierwszej części wartość zmiennej klasy pozostawała niezmieniona, w drugiej części widoczna jest nowa wartość zmiennej klasy, jak pokazano na rysunku 3.19.
  • 44. %ú è ++ 9RTQYCFGPKG FQ RTQITCOQYCPKC Y 2*2 4[UWPGM Zmiana wartości zmiennej klasy 2QFUWOQYCPKG W tym rozdziale pokrótce przyjrzeliśmy się ró nym rodzajom edytorów w systemie Windows, za pomocą których mo esz tworzyć skrypty PHP. Omówiliśmy równie pod- stawy języka PHP, takie jak składnia, zmienne, tablice, operatory logiczne i pętle, funkcje i obiekty. Rozdział 4., „PHP i pliki”, poświęcony jest współpracy PHP z plikami oraz systemem plików Windows.