goba Sun Jul 22 12:09:16 2001 EDT Modified files: /phpdoc/hu Translators /phpdoc/hu/language types.xml Log: Huh. Types.xml updating is ready :)) o Adding new files to Translators o Updating types.xml for the latest release (1.16 -> 1.40 bigjump TM) o Modified translator name of types.xml as this was a full rewrite Now only the install.xml update blocks the building of the hungarian manual (as make test says) Hope I can finish it in some days
Index: phpdoc/hu/Translators diff -u phpdoc/hu/Translators:1.33 phpdoc/hu/Translators:1.34 --- phpdoc/hu/Translators:1.33 Tue Jul 10 12:12:11 2001 +++ phpdoc/hu/Translators Sun Jul 22 12:09:16 2001 @@ -59,6 +59,20 @@ install.xml Hojtsy Gábor 1.31 ++ intro.xml Hojtsy Gábor 1.15 security.xml Hojtsy Gábor 1.19 +------- faq ----------------------------------------------------------------- +general.xml +mailinglist.xml +databases.xml +installation.xml +build.xml +using.xml +html.xml +languages.xml +common.xml +misc.xml +migration4.xml +migration.xml +obtaining.xml ------- features ------------------------------------------------------------ connection-handling.xml Hojtsy Gábor 1.3 cookies.xml Hojtsy Gábor 1.5 @@ -68,6 +82,7 @@ images.xml Hojtsy Gábor 1.8 persistent-connections.xml Hojtsy Gábor 1.7 remote-files.xml Hojtsy Gábor 1.6 +safe-mode.xml ------- functions ----------------------------------------------------------- apache.xml Varanka Zoltán 1.8 array.xml Varanka Zoltán [offline] @@ -169,7 +184,7 @@ oop.xml Kontra Gergely 1.5 ++ operators.xml Kontra Gergely 1.22 references.xml Kontra Gergely [undrcon] -types.xml Kontra Gergely 1.16 ++ (partially updated) +types.xml Hojtsy Gábor 1.40 variables.xml Kontra Gergely 1.15 -------- pear --------------------------------------------------------------- about.xml Index: phpdoc/hu/language/types.xml diff -u phpdoc/hu/language/types.xml:1.7 phpdoc/hu/language/types.xml:1.8 --- phpdoc/hu/language/types.xml:1.7 Tue Jul 10 12:12:12 2001 +++ phpdoc/hu/language/types.xml Sun Jul 22 12:09:16 2001 @@ -309,10 +309,10 @@ Sajnálatosan meg kell említenünk, hogy egy hiba van a PHP-ben (még a 4.0.6-osban is, de feltehetően a 4.0.7-es már javítja a hibát). Ez az átalakítás nem működik mindig - pontosan, ha negatív számokkal is számolunk. Ha mindkét - operandus pozitív, nincs semmi probléma. Például: ha a + pontosan, ha negatív számokkal is számolunk. Például: ha a <literal>-50000 * $millio</literal> értéket kérjük, - a válasz: <literal>-429496728</literal>. + a válasz: <literal>-429496728</literal>. Ha mindkét + operandus pozitív, nincs semmi probléma. </simpara> </warning> </para> @@ -389,13 +389,13 @@ <sect3 id="language.types.integer.casting.from-other"> <title>Átalakítás más típusokról</title> <para> - Az egésszé alakítás viselkedése más típusokra nem - definiált. Jelenleg ezek az átalakítások megegyeznek - azzal, mintha először <link linkend="language.types.boolean.casting" - >logikai</link>, majd utána egész értékké - alakítottad volna a kiindulási értéket. <caution> <simpara> + Az egésszé alakítás viselkedése más típusokra nem + definiált. Jelenleg ezek az átalakítások megegyeznek + azzal, mintha először <link linkend="language.types.boolean.casting" + >logikai</link>, majd utána egész értékké + alakítottad volna a kiindulási értéket. Erre a viselkedeésre azonban <emphasis>nem</emphasis> szabad építeni, mivel minden figyelmeztetés nélkül megváltozhat. @@ -410,19 +410,18 @@ <sect1 id="language.types.double"> <title>Lebegőpontos számok</title> <para> - A lebegőpontos számot ("double") az alábbi szintaxisok - bármelyikével létrehozhatunk: - <informalexample> - <programlisting role="php"> -$a = 1.234; -$a = 1.2e3; - </programlisting> - </informalexample> + A lebegőpontos számok ("double", "float", + "valós szám") az alábbi szintaxisok + bármelyikével hozhatóak létre: + <synopsis> +$a = 1.234; $a = 1.2e3; $a = 7E-10; + </synopsis> A lebegőpontos számok mérete platformfüggő, de a maximális érték körülbelül 1.8e308, durván 14 tizedesjegy pontossággal (64 bites IEEE formátum). </para> <warning id="warn.float-precision"> + <title>Lebegőpontos számok pontossága</title> <para> Elég gyakran előfordul, hogy egyszerű decimális törtek, mint a <literal>0.1</literal> és a <literal>0.7</literal> @@ -453,118 +452,221 @@ <sect1 id="language.types.string"> <title>Stringek</title> <para> - A string-eket kétféle határoló jellel lehet létrehozni. - </para> - <para> - Ha a string dupla-idézőjelben (") van, (néhány - feldolgozási korlátozás kivételével) a stringen belüli változók - behelyettesítésre kerülnek. Ahogy C-ben és Perl-ben, a bekszles - [backslash] (\) karakter segítségével lehet speciális - karaktereket megadni: - <table> - <title>Escape karakterek</title> - <tgroup cols="2"> - <thead> - <row> - <entry>szekvencia</entry> - <entry>jelentés</entry> - </row> - </thead> - <tbody> - <row> - <entry><literal>\n</literal></entry> - <entry>soremelés (LF azaz 0x0A ASCII érték)</entry> - </row> - <row> - <entry><literal>\r</literal></entry> - <entry>kocsivissza (CR azaz 0x0D ASCII érték)</entry> - </row> - <row> - <entry><literal>\t</literal></entry> - <entry>vízszintes [normál] tab (HT azaz 0x09 ASCII érték)</entry> - </row> - <row> - <entry><literal>\\</literal></entry> - <entry>backslash [nem sajthib, 1 backslash ugye nem elég...]</entry> - </row> - <row> - <entry><literal>\$</literal></entry> - <entry>dollár jel [a Ft még hiányzik a nyelvből, talán az 5.hu változatban :]</entry> - </row> - <row> - <entry><literal>\"</literal></entry> - <entry>dupla-idézőjel</entry> - </row> - <row> - <entry><literal>\[0-7]{1,3}</literal></entry> - <entry> - karakterek olyan sorozata, amely illeszkedik a reguláris kifejezésre, - melynek jelentése kb. oktális szám [pontosabban 1-3 '0'-'7' - intervallumban levő karakter] [ezt, mint stringet ne akarjuk kiírni :)] - </entry> - </row> - <row> - <entry><literal>\x[0-9A-Fa-f]{1,2}</literal></entry> - <entry> - karakterek olyan sorozata, amely illeszkedik a szabályos kifejezésre, - melynek jelentése kb. hexa szám [pontosabban 1 vagy 2 hexa számjegy] - [ezt se] - </entry> - </row> - </tbody> - </tgroup> - </table> - </para> - - <para> - Ha megpróbálod bármilyen más karakter elé írni - a \-t, mind a \, mind a karakter kiírásra kerül. - PHP 3 esetén ez a próbálkozás egy figyelmezetést - fog eredményezni az <literal>E_NOTICE</literal> - hibajelentési szinten. PHP 4 esetén nem kapsz - figyelmeztetést. - </para> - - <para> - A második módja a stringek megadásának a szimpla-idézőjel (') - karakter. Amikor egy string szimpla-idézőjelek közt van, - az egyetlen escape szekvencia, amit a nyelv megért a - "\\" és a "\'". Ez kényelmi szempontok miatt van így, - ugyanis így lehetnek szimpla-idézőjelek és backslashek - a szimpla-idézőjeles szövegben. A változók <emphasis>nem</emphasis> - helyettesítődnek be az értékükkel az ilyen stringen belül. + A <type>string</type> karakterek sorozata. PHP-ben + egy karakter pontosan egy bytenak felel meg, így 256 + különböző karakter lehetséges. Ez azt is jelenti, hogy + a PHP-nek jelenleg nincs beépített Unicode támogatása. </para> + <note> + <simpara> + Nem okozhat problémát a stringek körében, hogy + túl hosszúvá válnak. Semmiféle korlát nem létezik + a PHP által kezelt stringek méretére, ezért nem + kell tartani a hosszú stringektől. + </simpara> + </note> + <sect2 id="language.types.string.syntax"> + <title>Szintaxis</title> + <para> + A stringeket háromféleképpen lehet létrehozni. + <itemizedlist> + <listitem> + <simpara> + <link linkend="language.types.string.syntax.single">aposztróffal</link> + </simpara> + </listitem> + <listitem> + <simpara> + <link linkend="language.types.string.syntax.double">idézőjellel</link> + </simpara> + </listitem> + <listitem> + <simpara> + <link linkend="language.types.string.syntax.heredoc">heredoc +szintaxissal</link> + </simpara> + </listitem> + </itemizedlist> + </para> + <sect3 id="language.types.string.syntax.single"> + <title>String létrehozása aposztróffal</title> + <para> + A legkönnyebben úgy adhatunk meg egy egyszerű stringet, + hogy aposztrófok (<literal>'</literal> karakterek) közé + tesszük. + </para> + <para> + Ha a stringben egy aposztófot szeretnél elhelyezni, és + azzal nem a string végét szeretnéd jelezni, más nyelvekhez + hasonlóan egy visszaperjel karaktert kell alkalmaznod az + aposztóf előtt (<literal>\</literal>). + Ha egy aposztróf, vagy a string vége előtt el szeretnél + helyezni egy visszaperjelet, meg kell dupláznod azt. + Figyelj arra, hogy ha bármilyen más karakter elé teszel + visszaperjelet, a visszaperjel meg fog jelenni a stringben. + Emiatt gyakran nincs szükség magának a visszaperjelnek + a duplázására. + <note> + <simpara> + PHP 3 használatakor azonban egy <literal>E_NOTICE</literal> + szintű figyelmeztetést kapsz, ha ezt kihasználod. + </simpara> + </note> + <note> + <simpara> + A többi móddal ellentétben a változók értékei + <emphasis>nem</emphasis> helyettesítődnek be, + ha aposztrófos stingben változókra hivatkozol. + </simpara> + </note> + <informalexample> + <programlisting role="php"> +echo 'Egyszerű string'; +echo 'A stringekbe újsor karaktereket is építhetsz, +ilyen formában.'; +echo 'Arnold egyszer azt mondta: "I\'ll be back"'; +// kimenete: ... "I'll be back" +echo 'Are you sure you want to delete C:\\*.*?'; +// kimenete: ... delete C:\*.*? +echo 'Are you sure you want to delete C:\*.*?'; +// kimenete: ... delete C:\*.*? +echo 'Ezen a ponton próbálok beépíteni \n egy újsort'; +// kimenet: ... beépíteni \n egy újsort + </programlisting> + </informalexample> + </para> + </sect3> + <sect3 id="language.types.string.syntax.double"> + <title>String létrehozása idézőjellel</title> + <para> + Ha egy stringet idézőjelek (") közé helyezünk, + a PHP több speciális jelölés feldolgozására + lesz képes: + </para> + <table> + <title>Speciális jelölések idézőjeles stringben</title> + <tgroup cols="2"> + <thead> + <row> + <entry>jelölés</entry> + <entry>jelentése</entry> + </row> + </thead> + <tbody> + <row> + <entry><literal>\n</literal></entry> + <entry>újsor (LF vagy 0x0A (10) ASCII kódú karakter)</entry> + </row> + <row> + <entry><literal>\r</literal></entry> + <entry>kocsivissza (CR vagy 0x0D (13) ASCII kódú karakter)</entry> + </row> + <row> + <entry><literal>\t</literal></entry> + <entry>vízszintes tabulátor (HT vagy 0x09 (9) ASCII kódú karakter)</entry> + </row> + <row> + <entry><literal>\\</literal></entry> + <entry>visszaperjel</entry> + </row> + <row> + <entry><literal>\$</literal></entry> + <entry>dollárjel</entry> + </row> + <row> + <entry><literal>\"</literal></entry> + <entry>idézőjel</entry> + </row> + <row> + <entry><literal>\[0-7]{1,3}</literal></entry> + <entry> + egy karaktersorozat, ami oktális számokra + illeszkedik + </entry> + </row> + <row> + <entry><literal>\x[0-9A-Fa-f]{1,2}</literal></entry> + <entry> + egy karaktersorozat, ami hexadecimális számokra + illeszkedik + </entry> + </row> + </tbody> + </tgroup> + </table> + <para> + Ha bármilyen más karakter elé visszaperjelet írsz, + ebben az esetben is ki fog íródni a visszaperjel. + </para> + <para> + A legfontosabb előnye az idézőjeles stringeknek az, + hogy a változók behelyettesítésre kerülnek. + Lásd a <link linkend="language.types.string.parsing">változók + behelyettesítése</link> című részt további részletekért. + </para> + </sect3> + + <sect3 id="language.types.string.syntax.heredoc"> + <title>String létrehozása heredoc szintaxissal</title> + <simpara> + Egy másfajta módszer a stringek megadására a heredoc + szintaxis ("<<<"). [ez itt megint nem elírás, + kedves unix-shell programozó!] A <literal><<<</literal> + jelzés után egy azonosítót kell megadni, majd a stringet, + és végül az azonosítót mégegyszer, ezzel zárva + le a stringet. + </simpara> + <simpara> + A lezáró azonosítónak <emphasis>mindenképpen</emphasis> a + sor legelső karakterén kell kezdődnie. Ugyancsak figyelni + kell arra, hogy ez az azonosító is az általános PHP elemek + elnevezési korlátai alá tartozik: csak alfanumerikus + karaktereket és aláhúzást tartalmazhat, és nem kezdődhet + számjegy karakterrel. + </simpara> + + <warning> + <simpara> + Nagyon fontos, hogy odafigyelj arra, hogy a lezáró + azonosítót tartalmazó sor ne tartalmazzon semmi mást, + csupán <emphasis>esetleg</emphasis> egy + idézőjel (<literal>;</literal>) karaktert. Ez még + pontosabban azt is jelenti, hogy az azonosító + <emphasis>nem lehet beljebb kezdve</emphasis>, és + nem szabad semmilyen szóköz vagy tabulátor karaktert + sem elhelyezni a pontosvessző előtt vagy után. + </simpara> + <simpara> + Feltehetően a legkellemetlenebb korlátozás az, + hogy még egy kocsivissza (<literal>\r</literal>) + karakter sem lehet a sor végén, csak egy + újsor (<literal>\n</literal>) szerepelhet. + Mivel a Microsoft Windows a + <literal>\r\n</literal> sorozatot használja + a sorok végének jelzésére, a heredoc nem fog + működni, ha olyan szerkesztőben készíted + a programod, ami ezt a sorvég jelzést használja. + A legtöbb fejlesztőeszköz azonban lehetőséget ad + UNIX sorvégjelzéssel ellátott állományok mentésére. + </simpara> + </warning> - <simpara> - Másik módja a stringek megadásának a "here doc" - [NEM tessék, doki:) {parasolventia}] szintaxis - ("<<<"). [ez itt megint nem elírás, - kedves unix-shell programozó!] Először megadunk a - <literal><<<</literal> után egy stringvég szöveget, - majd a stringet, majd a stringvég szöveget egymagában a - sor elején. A stringvég szövegnek <emphasis>mindenképpen</emphasis> - a sor legelső karakterén kell kezdődnie. A használt stringvég - jelzésnek azokat a szabályokat kell követnie, mint bármilyen - más PHP cimkének: csak alfanumerikus karaktereket és aláhúzást - tartalmazhat, és nem szám karakterrel vagy aláhúzással kell - kezdődnie. - </simpara> - - <para> - A here doc szövegek úgy viselkednek, mint a dupla idézőjelbe tett - szövegek. Ez azt jelenti, hogy nem kell idézőjel escape-et használni - a here doc-ban, de a fent felsorolt escape-ek használhatóak. A - változóhelyettesítés is működik, de itt is figyelni kell a komplex - változókra, mint a stringeknél. - <example> - <title>"Here doc" string példa [VAS: Vége - A Stringnek de helyette lehet bármi:)]</title> + <para> + A heredoc az idézőjeles stringekhez hasonlóan működik, + az idézőjelek nélkül. Ez azt jelenti, hogy nem kell + visszaperjellel jelülni az idézőjeleket a szövegben, de + a fenti speciális jelölések használhatóak. + A változók értékei behelyettesítődnek, de az idézőjeles + karaktersorozatokhoz hasonlóan gondosan kell ügyelni + a komplex változó hivatkozások megadására. + <example> + <title>"Heredoc" string példa [VAS: Vége + A Stringnek de helyette lehet bármi]</title> <programlisting> <![CDATA[ <?php $str = <<<VAS Példa egy stringre, amely -több sorban van, és here doc +több sorban van, és heredoc szintaxisú VAS; @@ -589,30 +691,135 @@ VAS; ?> ]]> - </programlisting> - </example> - </para> - - <note> - <para> - A "here doc" a PHP 4-ben került a nyelvbe. - </para> - </note> - <para> - A stringeket össze lehet fűzni a '.' (pont) operátorral. - A '+' (összeadás) operátor erre nem jó. [a Perlből is kikopott...] - Bővebb leírásért nézd meg a <link - linkend="language.operators.string">String operátorok</link> - részt. - </para> - <para> - A stringben levő karaktereket elérhetjük, mint egy számozott karaktertömböt, - C szintaxist használva. Aki nem tud C-ül, nézze az alábbi példákat. - </para> - <para> - <example> - <title>String példák</title> - <programlisting role="php"> + </programlisting> + </example> + </para> + + <note> + <para> + A heredoc a PHP 4-esben került a nyelvbe. + </para> + </note> + + </sect3> + <sect3 id="language.types.string.parsing"> + <title>Változók behelyettesítése</title> + <simpara> + Ha egy stringet idézőjelek között, vagy heredoc + szintaxissal adsz meg, a jelölt változók értékei + behelyettesítésre kerülnek. + </simpara> + <simpara> + Kétféleképpen lehet megadni egy változót, az + <link linkend="language.types.string.parsing.simple">egyszerű</link> + és a + <link linkend="language.types.string.parsing.complex">komplex</link> + formátummal. + Az egyszerű forma a leggyakoribb és legkényelmesebb. Lehetőséget + ad egy skalár, tömb érték vagy egy objektum tulajdonság + beillesztésére. + </simpara> + <simpara> + A komplex szintaxis a PHP 4-es változatában került + a nyelvbe, és a jelölésben használatos kapcsos + zárójelekről ismerhető fel. + </simpara> + <sect4 id="language.types.string.parsing.simple"> + <title>Egyszerű szintaxis</title> + <simpara> + Ha dollár (<literal>$</literal>) jelet talál a PHP + egy stringben, mohón megkeresi az összes ezt követő + azonosítóban is használható karaktert, hogy egy + érvényes változónevet alkosson. Használj kapcsos + zárójeleket, ha pontosan meg szeretnéd határozni, + meddig tart egy változó. + </simpara> + <informalexample> + <programlisting role="php"> +$ingatlan = 'ház'; +echo "kertes $ingatlan kerítéssel"; // működik, szóköz nem lehet változónévben +echo "páros $ingatlanszám"; // nem működik, az 's' és további karakterek lehetnek +változónévben +echo "páros ${ingatlan}szám"; // működik, mert pontosan meg van adva a név + </programlisting> + </informalexample> + <simpara> + Hasonlóképpen meg lehet adni tömbindexet vagy + objektum tulajdonságot is. A tömbindexek esetében + a záró szögletes zárójel (<literal>]</literal>) + jelöli az index végét, az objektum tulajdonságoknál + az egyszerű skalárok szabályai érvényesek, habár + objektum tulajdonágok esetén nem használható a + fenti trükk. + </simpara> + <informalexample> + <programlisting role="php"> +$gyumolcsok = array( 'eper' => 'piros' , 'alma' => 'zöld' ); +echo "Az alma $gyumolcsok[alma]."; +echo "A négyzet $negyzet->szelesseg méter széles."; +echo "A négyzet $negyzet->szelesseg00 centiméter széles."; // nem működik + // a megoldás érdekében lásd a <link +linkend="language.types.string.parsing.complex">komplex szintaxist</link>. + </programlisting> + </informalexample> + <simpara> + Bármely ennél komplexebb helyettesítéshez a komplex + szintaxis használatos. + </simpara> + </sect4> + <sect4 id="language.types.string.parsing.complex"> + <title>Komplex (kapcsos zárójeles) szintaxis</title> + <simpara> + Ezt nem azért nevezzük komplexnek, mert a szintaxis + komplex, hanem azért, mert így komplex kifejezések + helyettesítésére nyílik lehetőség :). + </simpara> + <simpara> + Gyakorltilag bármilyen változó érték behelyettesíthető + ezzel a szintaxissal. Egyszerűen úgy kell megadni az + értéket adó kifejezést, mintha a stringen kívül + dolgoznál vele, és utána { és } jelek közé kell zárni. + Mivel a '{' jel megadására nincs speciális jelölés, + ez a forma csak akkor fog működni, ha a { után közvetlenül + egy $ jel található. (Használhatod a "{\$" vagy "\{$" + jelöléseket, ha a stringben a "{$" sorozatot szeretnéd + beilleszteni, és nem változóhelyettesítést adsz meg). + Néhány példa, ami tisztázhatja a félreértéseket: + </simpara> + <informalexample> + <programlisting role="php"> +$oriasi = 'fantasztikus'; +echo "Ez { $oriasi}"; // nem működik, kiírja, hogy : Ez { fantasztikus} +echo "Ez {$oriasi}"; // működik, kiírja, hogy: Ez fantasztikus +echo "Ez a négyzet {$negyzet->szelesseg}00 centiméter széles."; +echo "Működik: {$tomb[4][3]}"; +echo "Hibás: {$tomb[ize][3]}"; // ennek ugyanaz az oka, ami miatt + // a <link linkend="language.types.array.foo-bar">$ize[valami]</link + > hibás egy stringen kívül +echo "Ebben a formában már helyes: {$tomb['ize'][3]}"; +echo "Akár ezt is írhatod: {$obj->ertekek[3]->nev}"; +echo "Ez a $nev nevű változó értéke: {${$nev}}"; + </programlisting> + </informalexample> + </sect4> + </sect3> + + <sect3 id="language.types.string.substr"> + <title>String karaktereinek elérése</title> + <para> + A string karaktereire nullától számozott indexekkel + lehet hivatkozni, a string neve után megadott kapcsos + zárójelek között. + </para> + <note> + <simpara> + Kompatibilitási okokból a tömböknél használatos szögletes + zárójelek is alkalmazhatóak a karakterek eléréséhez. + Ez a tömb jelzés azonban nem javasolt a PHP 4-esben. + </simpara> + </note> + <para> + <example> + <title>Néhány string példa</title> + <programlisting role="php"> <![CDATA[ <?php /* String hozzárendelése */ @@ -634,16 +841,49 @@ /* A string első karaktere kerül first-be */ $str = 'Ez egy teszt.'; -$first = $str[0]; +$first = $str{0}; /* Most meg az utolsó */ $str = 'Ez még mindig egy teszt'; -$last = $str[strlen($str)-1]; +$last = $str{strlen($str)-1}; ?> ]]> - </programlisting> - </example> - </para> + </programlisting> + </example> + </para> + </sect3> + + </sect2> + + <sect2 id="language.types.string.useful-funcs"> + <title>Hasznos függvények</title> + <para> + Stringeket a '.' (pont) stringösszefűző operátorral tudsz + összefűzni. A '+' (összeadás) operátor nem alkalmas erre a + feladatra. Lásd a <link linkend="language.operators.string">String + operátorok</link> című részt további információkért. + </para> + <para> + Számos hasznos függvény létezik stringek manipulálásához. + </para> + <simpara> + Lásd a <link linkend="ref.strings">string függvények</link> + című részt általános függvényekért, a reguláris kifejezés + függvényeket fejlett kereséshez és cserékhez (két formában: + <link linkend="ref.pcre">Perl</link> és + <link linkend="ref.regex">POSIX kiterjesztett</link>). + </simpara> + <simpara> + Külön függvények léteznek <link linkend="ref.url">URL stringekhez</link>, + és stringek kódolásához/dekódolásához + (<link linkend="ref.mcrypt">mcrypt</link> és + <link linkend="ref.mhash">mhash</link> kódolások). + </simpara> + <simpara> + Végül ha ezek között sem találod, amit keresel, lásd a + <link linkend="ref.ctype">karakter típus függvényeket</link>. + </simpara> + </sect2> <sect2 id="language.types.string.conversion"> <title>String konverziók</title> @@ -674,14 +914,14 @@ <informalexample> <programlisting role="php"> <![CDATA[ -$foo = 1 + "10.5"; // $foo most double (11.5) -$foo = 1 + "-1.3e3"; // $foo most double (-1299) +$foo = 1 + "10.5"; // $foo most float (11.5) +$foo = 1 + "-1.3e3"; // $foo most float (-1299) $foo = 1 + "bob-1.3e3"; // $foo most integer (1) $foo = 1 + "bob3"; // $foo most integer (1) $foo = 1 + "10 Kicsi Pingvin"; // $foo most integer (11) $foo = 1 + "10 Kicsi Pingvinke" // $foo most integer (11) $foo = "10.0 disznó " + 1; // $foo most integer (11) -$foo = "10.0 disznó " + 0.5; // $foo most double (10.5) [szóval 10 disznó, meg egy féldisznó] +$foo = "10.0 disznó " + 0.5; // $foo most float (10.5) [szóval 10 disznó, meg egy +féldisznó] ]]> </programlisting> </informalexample> @@ -722,10 +962,400 @@ <title>Tömbök</title> <para> - A tömbök mind hashtáblaként (asszociatív tömb), mint indexelt - tömbként (vektor, normál tömb) működnek. + A PHP tömbjei rendezett leképezéseket valósítanak meg. A + leképezés <emphasis>értékeket</emphasis> rendel + <emphasis>kulcsokhoz</emphasis>. Ez a típus sokféleképpen + használható, mint egy hagyományos tömb, egy lista (vektor), + hash tábla, szótár, kollekció, halmaz, sor, és mások. + Mivel egy újabb PHP tömb szerepelhet értékként, könnyen + szimulálhatsz fákat. </para> + <para> + Az említett struktúrák leírása ezen kézikönyv kereteibe nem fér + bele, de legalább egy példát mutatunk mindegyikre. + További információkért külső forrásokat kell igénybe venned + erről az igen széles témáról. + </para> + + <sect2 id="language.types.array.syntax"> + <title>Szintaxis</title> + + <sect3 id="language.types.array.syntax.array-func"> + <title>Tömb létrehozása az <function>array</function> nyelvi elemmel</title> + <para> + Egy <type>array</type> (tömb) típusú változót az <function>array</function> + nyelvi elemmel tudsz létrehozni, amely számos vesszővel elválasztott + <literal><replaceable>kulcs</replaceable> => <replaceable + >érték</replaceable></literal> párt vár. + </para> + <para> + Egy <varname>kulcs</varname> vagy egy nemnegatív <type>integer</type> + (egész szám) vagy egy <type>string</type>. + Ha a kulcs egy szabványos formában megadott nemnegatív egész + szám (<type>integer</type>), az megfelelő módon kerül értelmezésre. + Konkrétabban pl. a <literal>'8'</literal> a <literal>8</literal> + egész szám lesz, míg a <literal>'08'</literal> a <literal>'08'</literal> + string. + </para> + <para> + Az érték bármi lehet. + </para> + <formalpara id="language.types.array.omit-key"> + <title>Kulcs elhagyása</title> + <para> + Ha nem adsz meg egy kulcsot, a PHP veszi az egész indexek + közül a legnagyobbat, és ennél egyel nagyobb indexű elemet + hoz létre. Ha még nincs egész értékkel megadott index, + az új kulcs <literal>0</literal> (nulla) lesz. Ha olyan kulcsot + adsz meg, ami már a tömb eleme, a korábbi elem felülíródik. + </para> + </formalpara> + + <para> + <synopsis> +array( <optional> <replaceable>kulcs</replaceable> => </optional> <replaceable +>érték</replaceable> + , ... + ) +// a <replaceable>kulcs</replaceable> vagy egy <type>string</type + > vagy egy nemnegatív <type>integer</type> (egész szám) +// az <replaceable>érték</replaceable> bármi lehet + </synopsis> + </para> + </sect3> + + <sect3 id="language.types.array.syntax.modifying"> + <title>Létrehozás/módosítás a szögletes zárójeles formával</title> + <para> + Meglévő tömbök is módosíthatóak konkrét elemek megadásával. + </para> + <para> + Ezt úgy tudod megtenni, hogy a tömb neve után szögletes + zárójelekben megadod a kulcsot, amit módosítani szeretnél. + Ha elhagyod a kulcsot, és csak egy üres szögletes zárójel + párt ("<literal>[]</literal>") adsz meg a változó neve után, + a tömb végére illeszthetsz elemet. + <synopsis> +$tomb[<replaceable>kulcs</replaceable>] = <replaceable>érték</replaceable>; +$tomb[] = <replaceable>érték</replaceable>; +// a <replaceable>kulcs</replaceable> vagy egy <type>string</type + > vagy egy nemnegatív <type>integer</type> (egész szám) +// az <replaceable>érték</replaceable> bármi lehet + </synopsis> + Ha a <varname>$tomb</varname> nem létezik, ezzel létrejön. + Tehát ez egy újabb alternatíva tömbök létrehozására. + Ha módosítani szeretnél egy elemet, rendelj hozzá + új értéket. Ha meg szeretnél szüntetni egy kulcs/érték + párt, használd az <function>unset</function> függvényt. + </para> + </sect3> + </sect2> + + <sect2 id="language.types.array.useful-funcs"> + <title>Hasznos függvények</title> + <para> + Jónéhámy függvény létezik a tömbökkel való + munka megkönnyítésére. Lásd a + <link linkend="ref.array">tömb függvények</link> + című részt. + </para> + <para> + A <link linkend="control-structures.foreach">foreach</link> + vezérlési szerkezet kifejezetten a tömbök számára + jött létre. Egy egyszerű módszert ad tömbökön való + végiglépkedésre. + </para> + </sect2> + + <sect2 id="language.types.array.donts"> + <title>Mit tehetünk, és mit nem a tömbökkel</title> + + <sect3 id="language.types.array.foo-bar"> + <title>Miért nem jó az <literal>$ize[valami]</literal> forma?</title> + <para> + Talán láttad ezt a szintaxist régi PHP programokban: + <informalexample> + <programlisting role="php"> +$ize[valami] = 'ellenség'; +echo $ize[valami]; +// stb. + </programlisting> + </informalexample> + Ez hibás, és mégis működik. Akkor mégis miért nem jó? Az ok az, + ami már a <link linkend="language.types.array.syntax" + >szintaxis</link> részben is olvasható volt, hogy + a szögletes zárójelek ('<literal>[</literal>' és + '<literal>]</literal>') között egy kifejezésnek + kell állnia. + Ez azt jelenti, hogy írhatsz ehhez hasonló dolgokat is: + <informalexample> + <programlisting role="php"> +echo $tomb[ ize(true) ]; + </programlisting> + </informalexample> + Ez a példa bemutatja, hogyan használhatsz függvény + visszatérési értéket tömbindexként. A PHP úgyszintén + ismeri a konstansokat. Bizonyára hallottál már + az <literal>E_*</literal> konstansokról. + + <informalexample> + <programlisting role="php"> +$hiba_leiras[E_ERROR] = "Fatális hiba történt"; +$hiba_leiras[E_WARNING] = "A PHP figyelmeztetést adott"; +$hiba_leiras[E_NOTICE] = "Informális megjegyzés"; + </programlisting> + </informalexample> + Figyeld meg, hogy az <literal>E_ERROR</literal> egy + érvényes azonosító, mint a <literal>valami</literal> + az előző példában. De a legutóbbi példa ugyanaz, + mintha ezt írnánk: + <informalexample> + <programlisting role="php"> +$hiba_leiras[1] = "Fatális hiba történt"; +$hiba_leiras[2] = "A PHP figyelmeztetést adott"; +$hiba_leiras[8] = "Informális megjegyzés"; + </programlisting> + </informalexample> + mivel az <literal>E_ERROR</literal> konstans értéke + <literal>1</literal>, stb. + </para> + <para> + Akkor hogyan lehet mégis, hogy az <literal>$ize[valami]</literal> + működik? Nos, azért, mert <literal>valami</literal> a szintaxisa + következtében egy konstanst határoz meg. Azonban ebben az esetben + <literal>valami</literal> nevű konstans nem létezik. A PHP ebben + az esetben azt feltételezi, hogy a <literal>valami</literal> + karaktersorozatra gondolsz (<literal>"valami"</literal>), csak + elfejeltetted kitenni az idézőjeleket. + </para> + <sect4> + <title>De miért nem jó ez?</title> + <para> + Valamikor a jövőben a PHP fejlesztői hozzáadhatnak egy új + konstanst vagy kulcsszót a nyelvhez, és akkor bajba kerülsz. + Például jelenleg sem használhatóak az <literal>empty</literal> + és <literal>default</literal> szavak, mivel ezek speciális + kulcsszavak. + </para> + <para> + Ha ezek az érvek nem győznek meg: ez a szintaxis egyszerűen + nem javasolt, és bármikor megszűnhet működni. + </para> + <tip> + <simpara> + Ha az <link linkend="function.error-reporting" + >error_reporting</link> beállítást <literal>E_ALL</literal> + értékre állítod be, látni fogod, hogy a PHP figyelmeztetéseket + generál, ha ezt a kunstrukciót használod. Ez ugyanígy érvényes + minden más nem javasolt 'szolgáltatásra'. + (Add az <literal>error_reporting(E_ALL);</literal> + sort a programod elejéhez). + </simpara> + </tip> + <note> + <simpara> + Idézőjeles <type>string</type>ekben, egy másik szintaxis + érvényes. Lásd a <link linkend="language.types.string.parsing" + >változók behelyettesítése</link> című részt további + részletekért. + </simpara> + </note> + </sect4> + </sect3> + </sect2> + + <sect2 id="language.types.array.examples"> + <title>Példák</title> + <para> + A tömb típus a PHP-ben nagyon sokoldalú, ezért összegyűjtöttünk + néhány példát, hogy megmutassuk a tömbök erejét. + </para> + <para> + <informalexample> + <programlisting role="php"> +<![CDATA[ +// ez +$a = array( 'szín' => 'piros', + 'íz' => 'édes', + 'alak' => 'kerek', + 'név' => 'alma', + 4 // 0 lesz a kulcsa + ); + +// teljesen megyezik ezzel +$a['szín'] = 'piros'; +$a['íz'] = 'édes'; +$a['alak'] = 'kerek'; +$a['név'] = 'alma'; +$a[] = 4; // 0 lesz a kulcsa + +$b[] = 'a'; +$b[] = 'b'; +$b[] = 'c'; +// a következő tömböt adja: array( 0 => 'a' , 1 => 'b' , 2 => 'c' ) +// vagy egyszerűen: array('a', 'b', 'c') +]]> + </programlisting> + </informalexample> + </para> + + <example> + <title>Az array() használata</title> + <programlisting role="php"> +<![CDATA[ +// Tömb, mint tulajdonság hozzárendelés +$map = array( 'verzió' => 4 + , 'rendszer' => 'Linux' + , 'nyelv' => 'angol' + , 'short_tags' => true + ); + +// szigorúan számokat tartalmazó tömb +$tomb = array( 7 + , 8 + , 0 + , 156 + , -10 + ); +// ez ugyanaz, mint array ( 0 => 7, 1 => 8, ...) + +$valtogatas = array( 10 // kulcsa 0 + , 5 => 6 + , 3 => 7 + , 'a' => 4 + , 11 // kulcsa 6 (a legnagyobb egész kulcs 5 volt) + , '8' => 2 // kulcsa 8 (egész!) + , '02' => 77 // kulcsa '02' + , 0 => 12 // a 10 értéket felülírjuk 12-vel + ); + +// üres tömb +$ures = array(); +]]> + </programlisting> + </example> + + <example id="language.types.array.examples.loop"> + <title>Kollekció</title> + <programlisting role="php"> +$szinek = array('piros','kék','zöld','sárga'); + +foreach ( $szinek as $szin ) +{ + echo "Szereted a(z) $szin színt?\n"; +} + +/* kimenete: +Szereted a(z) piros színt? +Szereted a(z) kék színt? +Szereted a(z) zöld színt? +Szereted a(z) sárga színt? +*/ + </programlisting> + </example> + + <para> + Figyelj arra, hogy jelenleg közvetlenül nem lehet módosítani + a tömb elemeinek értékét ezzel a ciklussal. + A problémát a következőképpen tudod megkerülni: + <example id="language.types.array.examples.changeloop"> + <title>Kollekció</title> + <programlisting role="php"> +<link linkend="control-structures.foreach">foreach</link> ( $szinek as $kulcs => +$szin ) +{ + // nem működik (nem módosítja a tömböt): + //$szin = <link linkend="function.strtoupper">strtoupper</link>($szin); + + // működik (módosítja a tömböt): + $szinek[$kulcs] = <link linkend="function.strtoupper">strtoupper</link>($szin); +} +<link linkend="function.print-r">print_r</link>($szinek); + +/* kimenete: +Array +( + [0] => PIROS + [1] => KÉK + [2] => ZÖLD + [3] => SÁRGA +) +*/ + </programlisting> + </example> + </para> + <para> + Ebben a példában egy egytől számozott tömböt készítünk. + <example> + <title>Egytől kezdődő index</title> + <programlisting role="php"> +$elsonegyed = array(1 => 'Január', 'Február', 'Március'); +<link linkend="function.print-r">print_r</link>($elsonegyed); + +/* kimenete: +Array +( + [1] => 'Január' + [2] => 'Február' + [3] => 'Március' +) +*/ + </programlisting> + </example> + </para> + <example> + <title>Felöltés valós adatokkal</title> + <programlisting role="php"> +// egy tömb felöltése a <link linkend="ref.dir">könyvtárban</link> található +filenevekkel +$konyvtar = <link linkend="function.opendir">opendir</link>('.'); +while ( $filenev = <link linkend="function.readdir">readdir</link>($konyvtar) ) +{ + $filenevek[] = $filenev; +} +<link linkend="function.closedir">closedir</link>($konyvtar); + </programlisting> + </example> + <para> + A tömbök rendezettek. A sorrendet számos függvénnyel + megváltoztathatod. Lásd a <link linkend="ref.array">tömb + függvények</link> című részt további információkért. + </para> + <example> + <title>Tömbök rendezése</title> + <programlisting role="php"> +<link linkend="function.sort">sort</link>($filenevek); +<link linkend="function.print-r">print_r</link>($filenevek); + </programlisting> + </example> + <para> + Mivel a tömb egy értéke bármi lehet, értékként akár + egy másik tömböt is megadhatsz. Ilyen formában készíthetsz + rekurzív vagy többdimenziós tömböket. + </para> + <example> + <title>Rekurzív és többdimenziós tömbök</title> + <programlisting role="php"> +$gyumolcsok = array ( "gyümölcsök" => array ( "a" => "narancs" + , "b" => "banán" + , "c" => "alma" + ) + , "számok" => array ( 1 + , 2 + , 3 + , 4 + , 5 + , 6 + ) + , "lyukak" => array ( "első" + , 5 => "második" + , "harmadik" + ) + ); + </programlisting> + </example> + </sect2> + +<!-- there is no such thing as multi/singel dim arrays (at least in PHP4) <sect2 id="language.types.array.single-dim"> <title>Egydimenziós tömbök</title> @@ -822,7 +1452,7 @@ <programlisting role="php"> <![CDATA[ $a[3]['ez'] = 'jó'; -echo "Ez már jó: " . $a[3][ez]; +echo "Ez már jó: " . $a[3]['ez']; ]]> </programlisting> </informalexample> @@ -834,7 +1464,7 @@ <programlisting role="php"> <![CDATA[ $a[3]['ez'] = 'jó'; -echo "Ez jó PHP 4-ben: {$a[3][ez]}"; +echo "Ez jó PHP 4-ben: {$a[3]['ez']}"; ]]> </programlisting> </informalexample> @@ -909,6 +1539,8 @@ </para> </sect2> +--> + </sect1> <sect1 id="language.types.object"> @@ -950,6 +1582,82 @@ </sect2> </sect1> + <sect1 id="language.types.resource"> + <title>Erőforrások</title> + + <para> + Az erőforrás egy olyan speciális változó, + ami egy külső erőforrásra tartalmaz referenciát. + Az erőforrásokat speciális függvények + hozzák létre és használják. Lásd az ide + tartozó <link linkend="resource">függeléket</link> + a különböző erőforrás típusokhoz tartozó + függvények listájával. + </para> + + <note> + <simpara> + Az erőforrás típus a PHP 4-esben került a nyelvbe. + </simpara> + </note> + + <sect2 id="language.types.resource.self-destruct"> + <title>Erőforrások felszabadítása</title> + + <para> + A PHP 4-es Zend Egine-jében bevezetett + hivatkozás-számlálási technika következtében + a használatlan erőforrásokat automatikusan + detektálja a PHP (mint a Java). Ebben az esetben + minden erőforrás által használt összes más erőforrás + felszabadításra kerül a szemétgyűjtő algoritmusban. + Emiatt ritkán szükséges, hogy felszabadítsuk a + foglalt memóríát valamilyen free_result jellegű + függvénnyel. + <note> + <simpara> + Az állandó adatbázis kapcsolatok speciálisak + abban az értelemben, hogy <emphasis>nem</emphasis> + szűnnek meg a szemétgyűjtés során. Lásd még + az <link + linkend="features.persistent-connections">állandó + kapcsolatok</link> című részt. + </simpara> + </note> + </para> + </sect2> + </sect1> + + + <sect1 id="language.types.null"> + <title>&null;</title> + + <para> + A speciális &null; érték jelzi, hogy egy változó + nem tartalmaz értéket. + </para> + <note> + <simpara> + A &null; típus a PHP 4-esben került bevezetésre. + </simpara> + </note> + + <sect2 id="language.types.null.syntax"> + <title>Szintaxis</title> + <para> + Csak egy értéket vehet fel a &null; típus, ami + a kisbetűs és nagybetűs írásmódra nem érzékeny + &null; kulcsszó. + <informalexample> + <programlisting role="php"> +$valtozo = Null; + </programlisting> + </informalexample> + </para> + </sect2> + + </sect1> + <sect1 id="language.types.type-juggling"> <title>Bűvészkedés a típusokkal</title> @@ -975,8 +1683,11 @@ <programlisting role="php"> <![CDATA[ $foo = "0"; // $foo egy string (ASCII 48) +<!-- bad example, no real operator (must be used with variable, modifies it too) $foo++; // $foo egy the string "1" (ASCII 49) $foo += 1; // $foo most egész (2) +--> +$foo += 2; // $foo most egész (2) $foo = $foo + 1.3; // $foo most double (3.3) $foo = 5 + "10 Kis Pingvin"; // $foo egész (15) $foo = 5 + "10 Kismalac"; // $foo egész (15) @@ -996,14 +1707,9 @@ használd a <function>settype</function> függvényt. </simpara> <para> - Ha kipróbálnád, írd be az alábbi sort, hogy lásd mi történik: - <informalexample> - <programlisting role="php"> -<![CDATA[ -echo "\$foo==$foo; type is " . gettype ($foo) . "<br>\n"; -]]> - </programlisting> - </informalexample> + Ha az ebben a fejezetben található példákat ki szeretnéd próbálni, + használd a <function>var_dump</function> függvényt a típusok + és értékek kiírására. </para> <note> <para> @@ -1064,6 +1770,9 @@ <simpara>(int), (integer) - egésszé konvertál</simpara> </listitem> <listitem> + <simpara>(bool), (boolean) - logikai értékké konvertál</simpara> + </listitem> + <listitem> <simpara>(real), (double), (float) - lebegőpontos számmá konvertál</simpara> </listitem> <listitem> @@ -1077,6 +1786,13 @@ </listitem> </itemizedlist> </para> + <tip> + <simpara> + Ahelyett, hogy egy változót stringgé alakítasz, egyszerűen + idézőjelbe is teheted, hogy ezt a hatást elérd. + </simpara> + </tip> + <para> Megjegyzés: szóközök és tabulátorok megengedettek a string belsejében, tehát az alábbiak ugyanazt csinálják: @@ -1091,8 +1807,52 @@ </para> <para> Nem mindig tiszta, hogy mi történik, ha típusok közt cast-olunk - [implicit cast]. Például az alábbit érdemes megjegyezni: + [implicit cast]. További információkért lásd az alábbi fejezeteket: + + <itemizedlist> + <listitem> + <simpara><link linkend="language.types.boolean.casting">Logikai + értékké alakítás</link></simpara> + </listitem> + <listitem> + <simpara><link linkend="language.types.integer.casting">Egész + értékké alakítás</link></simpara> + </listitem> + <!-- don't exist yet + <listitem> + <simpara><link linkend="language.types.double.casting">Converting to + float</link></simpara> + </listitem> + <listitem> + <simpara><link linkend="language.types.string.casting">Converting to + string</link></simpara> + </listitem> + <listitem> + <simpara><link linkend="language.types.array.casting">Converting to + array</link></simpara> + </listitem> + <listitem> + <simpara><link linkend="language.types.object.casting">Converting to + object</link></simpara> + </listitem> + <listitem> + <simpara><link linkend="language.types.resource.casting">Converting to + resource</link></simpara> + </listitem> + <listitem> + <simpara><link linkend="language.types.null.casting">Converting to + &null;</link></simpara> + </listitem> + --> + </itemizedlist> + </para> + + <para> + Amikor egy tömböt stringgé alakítasz, az eredmény az + <literal>Array</literal> szó lesz. Hasonlóan, ha objektumot + stringgé alakítasz, az <literal>Object</literal> szót kapod. </para> + <para> Ha skalárból, vagy stringből tömbbé szeretnénk konvertálni, a változó az első eleme lesz a tömbnek: