Mallien käyttäminen PHP:ssä. Jokerimerkkien käyttö PHP:ssä Merkit ja merkkihakemistot merkkijonoissa
IN viime aikoina keskustelut PHP-kielestä Habréssa rajoittuvat enemmän suunnitteluominaisuuksiin monimutkaiset järjestelmät, joka ei voi muuta kuin iloita. Katsottuani tusinaa tunnetuimpia verkkokehyksiä (Zend Framework, Adept, CakePHP, CodeIgniter, LIMB, Symfony, MZZ ja muut), olin vilpittömästi yllättynyt havaitessani joissakin merkittäviä puutteita alkeellisen optimoinnin näkökulmasta. .
Jotta aihe olisi teknisesti suuntautunut, tulokset esitetään tiukemmassa muodossa, mikä saattaa vaikeuttaa havaintoa jonkin verran.
Joten, mennään... Tehtävä on äärimmäisen yksinkertainen: tee kokeita merkkijonojen muodostamisen nopeudesta kerta- ja kaksoislainausmerkeissä olevista osamerkkijonoista. Periaatteessa tämä kysymys on edelleen ajankohtainen pitkään aikaan johtuen PHP:n merkkijonojen käsittelyn erityispiirteistä.
Skriptien perusoptimoinnista on monia artikkeleita sekä venäjäksi että muilla kielillä. Se kertoo vain vähän merkkijonoista, mutta huomauttaa, että lainausmerkeissä olevat merkkijonot "jäsentetään" muuttujia ja ohjausmerkkejä varten (kuten virallisessa dokumentaatiossa). Tämän perusteella on loogista olettaa, että merkkijonojen käyttö kaksoislainausmerkeissä on jonkin verran hitaampaa kuin samat toiminnot lainausmerkeissä olevilla osamerkkijonoilla.
Sen lisäksi, että PHP korvaa muuttujat merkkijonoiksi ja ketjuttaa muuttujia alimerkkijonoihin, PHP toteuttaa ainakin yhden tavan luoda merkkijonoja: työskentelee sprintf-funktion kanssa. On loogista olettaa niin tätä menetelmää tulee olemaan huomattavasti huonompi kuin "standardi" johtuen tarpeettomasta funktiokutsusta ja merkkijonojen jäsentämisestä.
Ainoa lisäys, ennen kuin esitän sinulle testikoodin: on 2 asiaa, jotka on otettava huomioon mahdollisia vaihtoehtoja työskentely kaksoislainattujen merkkijonojen kanssa: yksinkertaiset ja "kehittyneet" koodaustyylit huomioon ottaen. Sinun ei luultavasti pitäisi kiinnittää huomiota siihen, että muuttujat ovat aivan rivien alussa - ne ovat vain esimerkkejä:
$string = "$_SERVER["HTTP_HOST"] ei ole Uljanovskin alueen hallinto. Rakastamme venäjän kieltä, emmekä pidä niistä, jotka puhuvat sitä..."
Ja
$string = "($_SERVER["HTTP_HOST"]) ei ole Uljanovskin alueen hallinto. Rakastamme venäjän kieltä, emmekä pidä niistä, jotka puhuvat sitä..."
Testi numero yksi.
No, näyttää siltä, että kaikki varaukset on tehty - on aika näyttää työn tulokset. Lähdekoodi testaaja löytyy.
Kuvakaappaukset osoittavat, että hypoteesiani ei vahvistettu. Ainoa oikea oletus osoittautui työskentelystä merkkijonojen kanssa sprintf:n kautta. Nopeimmat olivat funktiot, jotka toimivat nimenomaan lainausmerkeillä.
Tilannetta lyhyesti pohdittuaan selitys tuli itsestään: koko pointti on, että viitemerkkijono, johon vaihdot tehtiin, on liian lyhyt: jäsentäjän kulku tällaisen merkkijonon läpi on kakkua. Kuitenkin myös tässä on selvää, että muuttujan natiivi korvaaminen merkkijonoksi antaa etua "edistyneeseen tyyliin".
Tämä on myös ketjutusmenetelmän heikkous: lisätyn datan määrä ylittää alimerkkijonojen määrän. Mistä yleiskustannukset tulevat, voit lukea jo mainitusta habratopicista.
Nämäkin ajatukset vaativat kuitenkin vahvistusta. Tämä vaati toisen testin, jossa oli muutoksia mahdollisiin mainittuihin syihin tällaiseen (minun) arvaamattomaan käyttäytymiseen. Viidennessä versiossa on ilmeisesti paljon muokattu (myönnän, että PHP:n viidennessä versiossa tein vain yhden testin: taulukon elementtien läpikulkua).
Testi numero kaksi.
Toinen hypoteesi: viitemerkkijonon pidentäminen johtaa viime kädessä lainausmerkeissä olevien merkkijonojen muodostumiseen liittyvien testitoimintojen toiminta-ajan prosenttiosuuden kasvuun verrattuna testin numero 1 tuloksiin. Sama tilanne on teoriassa havaittava. suhteessa sprintf-funktion toimintaan. Tämä johtuu ennen kaikkea tarpeesta jäsentää merkkijonoja ja siihen käytetyn ajan lisääntymisestä. Tilanteessa, jossa osamerkkijonoja ketjutetaan yksittäisissä lainausmerkeissä, uskon, että havaitaan suunnilleen sama tulos kuin ensimmäisessä testissä, mikä antaa hieman pienenemisen lainausmerkit_3() -funktion suoritusajan osuuteen verrattuna suoritusaikaan koko käsikirjoituksen (mutta ei suorituskyvyn lisäystä).
Päätelmät ovat itse asiassa vain myönteisiä ja vahvistavat hypoteesin. Kun viitemerkkijonoa kasvaa hieman, syntyy suuri kuorma, mikä johtaa lainausmerkkien ja sprintf:n toimintojen suorituskyvyn heikkenemiseen.
Oletus merkkijonoista yksittäisissä lainausmerkeissä osoittautui myös oikeaksi: ensimmäisen testin 36,75 % sijaan, toisessa lainausmerkit_3() -funktio vei 33,76 % skriptin suoritusajasta.
Käytännön arvo.
Yksinkertaisesti sanottuna, tiedoista vedoten, voimme päätellä: mitä pidempi rivi, jolla korvaus on tehtävä, todennäköisemmin, että ketjutustoiminto suoritetaan nopeammin kuin muuttujan etsiminen lainausmerkeissä. Vapaaehtoiset voivat yrittää valita tarvittavat lisäysparametrit (muuttujien lukumäärä, viitemerkkijonon pituus, muuttujien merkkijonojen pituudet) siten, että ne täyttävät suoritusaikojen yhtäläisyyden.
Siinä kaikki, oikeastaan. On vain lisättävä, että ohjelmoinnissa ei ole pikkujuttuja (tarkoitan niille, jotka haluavat sanoa "säästöt otteluissa" (c) Adelf). Tietäen tällaiset hienovaraisuudet ja ottamalla ne huomioon, voit kirjoittaa koodia, joka optimoidaan kaikilla tasoillaan;)
PS:
Testit suoritettiin Zend Studio For Eclipse 6.0.0:lla (mukana Debugger + Profiler).
PHP versio 5.2.5
Debian Linux -käyttöjärjestelmä
PPS:
Olisin iloinen, jos joku julkaisee näiden testien tulokset. Uskon, että tämä mahdollistaa objektiivisemman arvioinnin tarpeesta käyttää yhtä tai toista merkkijonojen korvaamistapaa. Arvostan myös terveellistä kritiikkiä esitystyyliä ja muotoilua kohtaan.
Merkkijonotyypin arvot ovat tekstimerkkijonoja (lyhyesti merkkijonoja). Merkkijono on nollan tai useamman merkin sarja. Merkkejä ovat kirjaimet, numerot, välimerkit, erikoismerkkejä ja tilat.
Merkkijono voidaan määritellä neljällä eri tavoin:
- kaksoislainausmerkit
- yksittäisiä lainauksia
- heredoc syntaksi
- nowdoc syntaksi
Merkkijono lainausmerkeissä
Merkkijono lainausmerkeissä:
Voit käyttää Escape-sarjoja kaksoislainausmerkkijonoissa. Ohjausjärjestys— Nämä ovat erikoismerkkejä, jotka on suunniteltu muotoilemaan tekstitulostetta. Seuraavat pakosarjat ovat saatavilla PHP:ssä:
Kaksilainausmerkkisten merkkijonojen tärkein ominaisuus on kyky käsitellä muuttujia merkkijonojen sisällä.
Dollarin merkki: \$";
Lainausmerkkien sisällä olevat merkkijonot voivat sisältää yksittäisiä lainausmerkkejä:
Echo "Yksi lainaus: "";
Merkkijono yksittäisissä lainausmerkeissä (heittomerkit)
Merkkijono yksittäisissä lainausmerkeissä:
$str = "Merkkijono"; echo "Yksi iso rivi voidaan jakaa useiksi pieniksi riveiksi lukemisen helpottamiseksi.";
Toisin kuin kaksoislainausmerkkijonoissa ja heredoc-syntaksissa, muuttujat ja ohjaussekvenssit (yhtä poikkeusta lukuun ottamatta) yksittäisiä lainauksia, ei käsitellä. Tämä tarkoittaa, että ne tulkitaan tavallisiksi merkkijonomerkeiksi:
$num = 10; echo "Numero: $num
Dollarin merkki: \$";
Jotta voit käyttää yksittäisiä lainausmerkkejä yksittäisten lainausmerkkien sisällä olevassa merkkijonossa, sinun on poistettava ne kenoviivalla (\"). Jos haluat kirjoittaa kenoviivan, sinun on kopioitava se (\\):
Echo "Käytä \"yksittäisiä\" lainausmerkkejä"; echo "kenoviiva: \\";
Yksittäisiin lainausmerkkeihin suljetut merkkijonot voivat sisältää kaksoislainausmerkkejä:
Echo "Kaksoislainaus: "";
Heredoc syntaksi
Heredoc-syntaksi on vaihtoehtoinen tapa merkkijonojen kirjoittaminen.
Heredoc-syntaksilla määritetty merkkijono toimii samalla tavalla kuin lainausmerkkien sisällä oleva merkkijono. Ero Heredocin ja kaksoislainausmerkkijonon välillä on se, että Heredocissa ei tarvitse paeta lainausmerkkejä.
Heredoc-syntaksi alkaa kolmella merkillä<<< , после которых должен быть указан произвольный идентификатор (назовём его открывающим). Идентификатор может быть указан как в двойных кавычках, так и без них. Heti tunnisteen perässä tulee olla rivinvaihto, sen jälkeen ei saa olla muita merkkejä kuin rivinvaihto, muuten tapahtuu virhe. Seuraavaksi tulee itse merkkijonon sisältö. Merkkijonon sisällön jälkeen erilliselle riville on määritettävä sulkeva tunniste (sama kuin<<<). Перед ним и после него не должно быть никаких пробелов или других символов, за исключением точки с запятой. Если это правило нарушено, то считается, что закрывающий идентификатор отсутствует и будет вызвана ошибка:
<< Nowdoc-syntaksi, kuten Heredoc, on vaihtoehtoinen tapa kirjoittaa merkkijonoja. Nowdoc-syntaksilla määritetty merkkijono toimii samalla tavalla kuin lainausmerkkien sisällä oleva merkkijono. Ero Nowdocin ja kertalainausmerkkijonon välillä on se, että Nowdocissa ei tarvitse välttää yksittäisiä lainausmerkkejä. Nowdocin syntaksi on samanlainen kuin Heredocin, sillä ainoa ero on, että avaustunniste on suljettava lainausmerkkeihin: $num = 10; kaiku<<<"some_id"
Число: $num
some_id;
Merkkijonojen muuttujien käsittelyyn on olemassa kahdenlaisia syntaksia: yksinkertainen Ja vaikea. Yksinkertainen syntaksi- silloin muuttujan nimi ilmoitetaan rivillä sellaisenaan. Kun tulkki kohtaa dollarimerkin, se alkaa tarkistaa peräkkäin, ovatko kaikki seuraavat merkit kelvollisia merkkejä muuttujan nimessä. Joten kelvollisen muuttujan nimen muodostamiseksi se kaappaa mahdollisimman monta merkkiä: $str = "Maailma!"; echo "Hei $str"; Monimutkainen syntaksi- Tämä on silloin, kun muuttujan nimi on suljettu aaltosulkeisiin. Koska tulkki sieppaa rivillä olevan muuttujan käsittelemiseksi mahdollisimman monta merkkiä, on tilanteita, joissa tulkki ei pysty itsenäisesti määrittämään, mihin muuttujan nimi päättyy: $sport1 = "tahto"; $sport2 = "jalka"; echo "Pidän $sport1ballista ja $sport2ballista"; Tässä tapauksessa haluttua tulosta ei saavuteta, koska tulkki pitää $sport1 osana muuttujan nimeä $sport1bol, jota ei ole olemassa. Jos haluat kertoa tulkille nimenomaisesti, mihin muuttujan nimi päättyy, sinun on sisällytettävä muuttujan nimi aaltosulkeisiin: $sport1 = "tahto"; $sport2 = "jalka"; echo "Pidän ($sport1)bol ja ($sport2)bol."; Dollarimerkki voidaan sijoittaa joko kiharan aaltosulkeen eteen tai sen jälkeen: $sport1 = "tahto"; $urheilu2 = "jalka"; echo "Pidän $(sport1)bol ja ($sport2)bol."; Yhdistäminen on kahden tai useamman merkkijonon yhdistämistä yhdeksi suuremmaksi merkkijonoksi. Kytkentä tapahtuu käyttämällä ketjutusoperaattoria - . (piste). Yhdistettäessä jokainen seuraava rivi lisätään edellisen loppuun:
Minkä tahansa tyyppinen arvo, joka on ketjutettu merkkijonoon, muunnetaan implisiittisesti merkkijonoksi ja ketjutetaan sitten:
"; echo "Numero: " . 1; ?> Kommentti:
PHP 7.0.0:ssa 64-bittisissä alustoissa ei ole saavutettavissa olevia rajoituksia 32-bittisissä järjestelmissä, ja PHP:n aiemmissa versioissa rivit eivät voi olla suurempia kuin 2 Gt (2147483647 tavua). Merkkijono voidaan määrittää neljällä eri tavalla: Yksinkertaisin tapa määrittää merkkijono on laittaa se lainausmerkkeihin (symboli "
). Jos haluat käyttää yhtä lainausta merkkijonon sisällä, poista se kenoviivalla ( \
). Jos sinun on kirjoitettava kenoviiva itse, kopioi se ( \\
). Kaikki muut kenoviivan käyttötavat tulkitaan normaaleina merkeinä: tämä tarkoittaa, että jos yrität käyttää muita estosarjoja, kuten esim. \r tai \n, ne tulostetaan sellaisenaan minkään erityisen käyttäytymisen sijaan. kaiku "tämä on yksinkertainen merkkijono"; kaiku "Voit myös lisätä riveihin // Tulokset: Arnold sanoi kerran: "Tulen takaisin" Kaiku "Poistitko C:\\*.*?"; // Lähdöt: Poistitko C:\*.*? // Lähdöt: Tätä ei laajenneta: \n rivinvaihto // Tulokset: $expand ja $joko muuttujia ei laajenneta Jos merkkijono on lainausmerkkien (") sisällä, PHP tunnistaa seuraavat erikoismerkkien erotussekvenssit: Kuten yksittäisiin lainausmerkkeihin suljetun merkkijonon kohdalla, minkä tahansa merkin poisto tulostaa myös itse poistomerkin. Ennen PHP 5.1.1:tä kenoviiva sisään \($var) ei julkaistu. Kolmas tapa määrittää merkkijonoja on käyttää heredoc-syntaksia: <<<
. Tämän operaattorin jälkeen sinun on määritettävä tunniste ja sitten rivinvaihto. Tämän jälkeen tulee itse rivi ja sitten sama tunniste, joka sulkee lisäyksen. Linja pitäisi aloita sulkevalla tunnisteella, ts. sen tulee näkyä rivin ensimmäisessä sarakkeessa. Lisäksi tunnisteen on noudatettava samoja nimeämissääntöjä kuin kaikkien muiden PHP-tunnisteiden: sisältää vain aakkosnumeerisia merkkejä ja alaviivaa, eikä se saa alkaa numerolla (alaviivat ovat sallittuja). Huomio
On erittäin tärkeää huomata, että päättävä tunnusrivi ei saa sisältää muita merkkejä kuin puolipiste ( ;
). Tämä tarkoittaa, että id ei saa olla sisennystä ja että puolipisteen edessä tai jälkeen ei saa olla välilyöntejä tai sarkaimia. On myös tärkeää ymmärtää, että ensimmäisen merkin ennen sulkevaa tunnistetta on oltava rivinvaihtomerkki käyttöjärjestelmäsi määrittelemällä tavalla. Esimerkiksi UNIX-järjestelmissä, mukaan lukien macOS, tämä on \n. Uuden rivin tulee myös alkaa välittömästi sulkevan tunnuksen jälkeen. Jos tätä sääntöä rikotaan ja sulkeva tunniste ei ole "puhdas", oletetaan, että sulkeva tunniste puuttuu ja PHP jatkaa sen etsimistä. Jos tässä tapauksessa oikeaa sulkevaa tunnistetta ei löydy, se aiheuttaa jäsennysvirheen komentosarjan lopussa olevan rivinumeron kanssa. Esimerkki #1 Esimerkki virheellisestä syntaksista luokka foo ( Esimerkki #2 Esimerkki oikeasta syntaksista luokka foo ( Heredocia ei voi käyttää luokkakenttien alustamiseen. PHP 5.3:sta alkaen tämä rajoitus koskee vain sellaisia heredocseja, jotka sisältävät muuttujia niiden sisällä. Heredoc-teksti toimii samalla tavalla kuin merkkijono lainausmerkeissä ilman niitä. Tämä tarkoittaa, että sinun ei tarvitse pakottaa lainausmerkkejä heredocissa, mutta voit silti käyttää yllä olevia erotussarjoja.<< kattaa useita rivejä, Luokka foo Function__construct() $tämä -><< Nyt päättelen ($foo -> baari [ 1 ]) Tämän pitäisi tulostaa iso kirjain "A": \x41 Nimeni on "Nimi". Kirjoitan Foo. Nyt tuon Bar2:n. Tämän pitäisi tulostaa iso kirjain "A": A On myös mahdollista käyttää heredoc-syntaksia tietojen välittämiseen funktioargumenttien kautta: staattinen $bar = const BAR =<< FOOBAR; Esimerkki kentän käytöstä PHP 5.3.0:sta lähtien Heredoc-tunnisteen voi myös ympäröidä lainausmerkeillä: Nytdoc
ilmoittamalla tekstilohkon, jota ei ole tarkoitus käsitellä. Nowdoc on merkitty samalla järjestyksellä <<<
, jota käytetään tässä asiakirjassa, mutta seuraava tunniste on esimerkiksi lainausmerkeissä, <<<"EOT"
. Kaikki heredoc-tunnisteita koskevat ehdot koskevat myös nowdocia, erityisesti ne, jotka koskevat sulkevaa tunnistetta. $tämä -><<<"EOD" EOD; Tämän esimerkin suorittamisen tulos: Esimerkki tekstistä, joka kattaa useita rivejä nowdoc-syntaksilla. Kenoviivaa käsitellään aina kirjaimellisesti, kuten \\ ja \". Esimerkki #8 Nowdoc-merkkijono, joka lainaa esimerkkiä muuttujilla Luokka foo Function__construct() $tämä -><<<"EOT" EOD; Tämän ei pitäisi tulostaa isoa kirjainta "A": \x41 Nimeni on "$nimi". Tulostan $foo->foo. Nyt tulostan ($foo->bar). Tämän ei pitäisi tulostaa isoa kirjainta "A": \x41 luokka foo ( Kommentti: Esimerkki #9 Esimerkki staattisen tiedon käyttämisestä Muuttujien käsittely Jos merkkijono on määritetty lainausmerkeissä tai käyttämällä heredocia, sen sisällä olevat muuttujat käsitellään. Syntaksia on kahta tyyppiä: yksinkertainen ja monimutkainen. Yksinkertainen syntaksi on helpompaa ja kätevämpää. Se mahdollistaa muuttujan, taulukon arvon ( joukko) tai kohteen ominaisuuksia ( esine Monimutkainen syntaksi voidaan tunnistaa lauseketta ympäröivistä aaltosulkeista. $
Yksinkertainen syntaksi Jos tulkki kohtaa dollarin merkin ( ), se kaappaa mahdollisimman monta merkkiä kelvollisen muuttujan nimen muodostamiseksi. Jos haluat määrittää nimen lopun, kirjoita muuttujan nimi aaltosulkeisiin. $mehu = "omena" ; // Väärin. "s" on kelvollinen merkki muuttujan nimelle, mutta muuttujan nimi on $juice. EOD; // Oikein. Muuttujan nimen loppu ilmoitetaan tarkasti suluissa: echo "Hän joi mehua, joka oli tehty $( mehu ) s." ; Syntaksia on kahta tyyppiä: yksinkertainen ja monimutkainen. Hän joi omenamehua. Hän joi mehua, joka oli valmistettu . Hän joi omenoista valmistettua mehua. joukko Joukkoelementti ( ]
) merkitsee indeksin määritelmän loppua. Objektin ominaisuuksiin sovelletaan samat säännöt kuin yksinkertaisiin muuttujiin. Esimerkki #10 Yksinkertainen syntaksiesimerkki define ("KOOLAID" , "koolaid1" ); echo "Hän joi $mehut [ 0 ] mehua." . PHP_EOL ; luokan ihmiset ( Julkinen $smith = "Smith" ; $ihmiset = uudet ihmiset(); echo "$people -> john joi $mehut [ 0 ] mehua." . PHP_EOL ; EOD; Hän joi omenamehua. Hän joi appelsiinimehua. Hän joi violettia mehua. John Smith joi omenamehua. John Smith tervehti sitten Jane Smithiä. John Smithin vaimo tervehti Robert Paulsenia. PHP 7.1.0 lisätty tuki negatiivinen numeeriset indeksit. Esimerkki #11 Negatiiviset numeeriset indeksit $string = "merkkijono" ; EOD; Merkki, jonka indeksi on -2, on yhtä suuri kuin n. Vaihtamalla merkin kohdassa -3 "o":ksi saadaan seuraava rivi: vahva Jos kyseessä on monimutkaisempi, käytä monimutkaista syntaksia. Sitä ei kutsuta kompleksiseksi siksi, että se on vaikea ymmärtää, vaan koska se sallii monimutkaisten ilmaisujen käytön. Mikä tahansa merkkijonoon kartoitettu skalaarimuuttuja, taulukkoelementti tai objektiominaisuus voidaan esittää merkkijonossa tätä syntaksia käyttämällä. Kirjoita lauseke samalla tavalla kuin rivin ulkopuolelle ja kääri se sitten sisään {
Ja }
. Koska {
ei voida välttää, tämä syntaksi tunnistetaan vain, kun $
seuraa suoraan
{
. Käyttää {\$
tulostaa {$
. Muutama havainnollistava esimerkki: virhe_raportointi(E_ALL); $hieno = "hieno" ; echo "Tämä on ( $hieno )" ; echo "Tämä on ( $hieno )" ; ( $neliö -> leveys ) 00 senttimetriä." ; echo "Tämä on ( $hieno )" ; // Tämä on virheellinen samasta syystä kuin $foo ulkopuolella // Toimii. Käytettäessä moniulotteisia taulukoita sisäisesti // Toimii. kaiku "Tämäkin toimii:( $obj -> arvot [ 3 ]-> nimi ) " ; kaiku "Tämä on nimetyn muuttujan arvo$nimi : ($( $nimi )) " ; kaiku "Tämä on muuttujan nimen arvo, jonka getName() palauttaa:($( getName ())) " ; kaiku "Tämä on muuttujan nimen arvo, jonka \$object->getName() palauttaa:($( $object -> getName ())) " ; // Ei toimi, tulostaa: Tämän getName() palauttaa: (getName()) Tämän syntaksin avulla on myös mahdollista päästä käsiksi merkkijonojen objektien ominaisuuksiin. luokka foo ( Function__construct() EOD; Olen baari. Olen baari. Kommentti: Funktiot, menetelmäkutsut, staattiset luokkamuuttujat ja luokkavakiot toimivat sisäisesti {$}
, alkaen PHP 5:stä. Annettua arvoa käsitellään kuitenkin muuttujan nimenä samassa yhteydessä kuin riviä, jossa se on määritelty. Yksittäisten kiharoiden olkaimet ( {}
) ei toimi funktioiden, menetelmien, luokkavakioiden tai staattisten luokkamuuttujien arvojen käyttämiseen. Muutama havainnollistava esimerkki: luokan oluet ( $rootbeer = "A & W" ; // Tämä toimii, tulostaa: Haluaisin A & W // Tämäkin toimii, tulostaa: Haluaisin Alexander Keithin Merkkijonoissa olevia merkkejä voidaan käyttää ja muokata määrittämällä niiden siirtymä merkkijonon alusta alkaen nollasta, hakasulkeissa merkkijonon jälkeen, esimerkiksi $str . Ajattele tätä tarkoitusta varten olevaa merkkijonoa merkkijonona. Ja Jos sinun on hankittava tai korvattava enemmän kuin yksi merkki, voit käyttää toimintoja. Kommentti:
PHP 7.1.0:sta lähtien negatiivisia offset-arvoja tuetaan. Ne määrittävät siirtymän rivin lopusta. Aiemmin negatiiviset poikkeamat aiheuttivat tasovirheen E_NOTICE luettaessa (palauttaa tyhjä merkkijono) tai E_VAROITUS Kommentti:
kirjoitettaessa (jätä rivi ennalleen). Huomio
Merkkijonossa olevaa merkkiä voidaan käyttää myös aaltosulkeilla, esimerkiksi $str(42) . luettaessa (palauttaa tyhjä merkkijono) tai Jos yritetään kirjoittaa rivin rajojen yli olevaan siirtymään, merkkijono täytetään välilyönneillä tähän siirtymään asti. Muut kuin kokonaislukutyypit muunnetaan kokonaislukutyypeiksi. Huomio
Väärä offset-tyyppi aiheuttaa tasovirheen Kommentti:
. Vain määritetyn merkkijonon ensimmäistä merkkiä käytetään. PHP 7.1.0:sta lähtien tyhjän merkkijonon määrittäminen aiheuttaa vakavan virheen. Aikaisemmin tässä tapauksessa oli määritetty nollatavu (NULL). Esimerkki #12 Joitakin esimerkkijonoja $str = "Tämä on testi." ; $kolmas = $str [ 2 ];
?>
$last = $str [ strlen ($str ) - 1 ]; // Muuta rivin viimeistä merkkiä$str = "Katso merta" ; 0
. $str [ strlen ($str )- 1 ] = "e" ; PHP 5.4:stä lähtien merkkijonon siirtymä on määritettävä joko kokonaislukuna tai merkkijonona, joka sisältää numeroita, muuten annetaan varoitus. Aikaisemmin merkkijonon kaltainen offset "foo" Esimerkki #13 Erot PHP 5.3:n ja PHP 5.4:n välillä Var_dump($str["1"]); Var_dump($str["1.0"]); Var_dump($str["x"]); var_dump (isset($str [ "x" ])); Var_dump($str["1x"]); var_dump (isset($str [ "1x" ])); Kommentti: Yritetään käyttää muun tyyppisiä muuttujia (lukuun ottamatta taulukoita tai objekteja, jotka toteuttavat tiettyjä rajapintoja) käyttämällä
tai {}
palaa hiljaa NULL. Kommentti: PHP 5.5 lisäsi tuen merkkijonoliteraaleissa olevien merkkien käyttämiseen syntaksin avulla
tai {}
. Merkkijonojen muokkaamiseen on monia hyödyllisiä toimintoja. Perusfunktiot on kuvattu merkkijonofunktioita käsittelevässä osiossa, ja tarkennetun haun ja korvaamisen osalta Perl-yhteensopivia säännöllisiä lausekefunktioita. Arvo voidaan muuntaa merkkijonoksi castin avulla (merkkijono), tai toimintoja strval(). kaiku tai Lausekkeissa, joissa vaaditaan merkkijono, muunnos tapahtuu automaattisesti. Tämä tapahtuu, kun käytät toimintoja painaa. , tai kun muuttujan arvoa verrataan merkkijonoon. Käsikirjan Tyypit ja Tyyppikäsittely -osioiden lukeminen selventää seuraavaa. Katso myös settype() Taulukot muunnetaan aina merkkijonoksi Syntaksia on kahta tyyppiä: yksinkertainen ja monimutkainen."Matriisi" kaiku tai Lausekkeissa, joissa vaaditaan merkkijono, muunnos tapahtuu automaattisesti., joten et voi näyttää taulukon sisältöä ( ), käyttämällä nähdäksesi mitä se sisältää. Jos haluat tarkastella yksittäistä elementtiä, käytä jotain tällaista echo $arr["foo"] . Katso alta vinkkejä kaiken sisällön näyttämiseen/katsomiseen. Muuntaa tyyppimuuttujan "Esine" tyypiltään merkkijono NULL Käytetään taikamenetelmää __toString. Merkitys muunnetaan aina tyhjäksi merkkijonoksi. Ja Kuten yllä näkyy, taulukoiden, objektien tai resurssien suora muuntaminen merkkijonoksi ei anna muuta hyödyllistä tietoa arvoista itsestään kuin niiden tyypeistä.. Parempi tapa tulostaa arvoja virheenkorjausta varten on käyttää funktioita print_r(). Useimmat PHP:n arvot voidaan muuntaa merkkijonoksi jatkuvaa tallennusta varten. Tätä menetelmää kutsutaan serialisoinniksi ja se voidaan tehdä funktiolla serialize() Merkkijonojen muuntaminen numeroiksi Jos merkkijono tunnistetaan numeeriseksi arvoksi, tuloksena oleva arvo ja tyyppi määritetään seuraavasti. Jos merkkijono ei sisällä mitään merkkejä ".", "e" tai "E" ja luvun arvo on kokonaislukujen alueella (määritelty PHP_INT_MAX ), merkkijono tunnistetaan kokonaisluvuksi (). Arvo määräytyy merkkijonon alun perusteella. Jos rivi alkaa kelvollisella numeerisella arvolla, sitä arvoa käytetään. Muussa tapauksessa arvo on 0 (nolla). Kelvollinen numeerinen arvo on yksi tai useampi numero (joka voi sisältää desimaalipilkun), jota edeltää valinnaisesti etumerkki, jota seuraa valinnainen eksponentti. Eksponentti on "e" tai "E", jota seuraa yksi tai useampi numero. $foo = 1 + "10,5" ; // $foo on kelluva (11.5) Lisätietoja tästä muunnoksesta on Unix-dokumentaation strtod(3)-osiossa. Jos haluat testata mitä tahansa tämän osan esimerkeistä, kopioi ja liitä se ja seuraava rivi nähdäksesi mitä tapahtuu: echo "\$foo== $foo ; kirjoita: " . gettype ($foo) . " Älä odota saavasi merkin koodia muuntamalla se kokonaisluvuksi (kuten tehdään esimerkiksi C:ssä). Voit muuntaa merkit ASCII-koodeiksi ja takaisin käyttämällä toimintoja ord() Ja chr(). 7 vuotta sitten Dokumentaatiossa ei mainita, mutta sulkeva puolipiste heredocin lopussa tulkitaan itse asiassa oikeaksi puolipisteeksi ja sellaisenaan johtaa joskus syntaksivirheisiin. $foo =<< foo (<< foo (<< 3 vuotta sitten Voit käyttää merkkijonoa kuten merkkijonoa (kuten C) $a = "Merkkijonotaulukkotesti"; var_dump($a); var_dump($a); // -- Array castilla -- var_dump((taulukko) $a); Norihiori 15 vuotta sitten Voit käyttää monimutkaista syntaksia asettaaksesi sekä objektin ominaisuuksien että objektimenetelmien arvon merkkijonoon. Esimerkiksi... Et kuitenkaan voi tehdä tätä kaikille nimiavaruuden arvoille. Luokkavakiot ja staattiset ominaisuudet/menetelmät eivät toimi, koska monimutkainen syntaksi etsii "$". 3 vuotta sitten Varo, että "Merkon merkkijonon muuntaminen numeroiksi" mukaisesti: Jos ("123abc" == 123 ) kaiku "(intstr == int) testaa virheellisesti tosi."; // Koska toinen puoli on numero, merkkijono muunnetaan väärin intstr:stä int:ksi, joka sitten vastaa testinumeroa. // Totta kaikille ehdollisille, kuten if- ja switch-lauseille (luultavasti myös while-silmukaille)! // Tämä voi olla valtava turvallisuusriski testattaessa/käytettäessä/tallennettaessa käyttäjän syötteitä, kun odotellaan ja testataan vain kokonaislukua. // Näyttää siltä, että ainoa korjaus on, että 123 on merkkijono "123", joten muuntamista ei tapahdu.
?>
6 vuotta sitten Merkkijonojen etunollia ei käsitellä (vähintään yllätys) oktaaleina. 10 vuotta sitten Tässä on helppo hakkerointi, jonka avulla kaksoislainausmerkkijonot ja heredocs voivat sisältää mielivaltaisia lausekkeita aaltosulkeissa, mukaan lukien vakiot ja muut funktiokutsut: // Hakkerointiilmoitus // Meidän leikkipaikka
$a=
3
; toiminto c($a,
$b) (paluu$a+
$b; }
//Käyttö // Yleinen syntaksi on ($_expr(...)) 2 vuotta sitten Ajattelin, että olisi hyödyllistä lisätä tämä kommentti, jotta tiedot näkyvät ainakin PHP-sivuston oikealla sivulla. Huomaa, että jos aiot käyttää kaksoislainausmerkkiä assosiatiivisen avaimen kanssa, saatat törmätä T_ENCAPSED_AND_WHITESPACE-virheeseen. Jotkut pitävät tätä yhtenä vähemmän ilmeisistä virheilmoituksista. Ilmaisu, kuten: $hedelmä=array( Painaa "Tämä on a$hedelmä[
"a"]";
// T_ENCAPSED_AND_WHITESPACE Voit ratkaista sen seuraavasti: Lausekkeissa, joissa vaaditaan merkkijono, muunnos tapahtuu automaattisesti."Tämä on a$hedelmä[
a]
"
;
// Avaa lainaus Ei ole selvää (ainakin minulle), miksi PHP tulkitsee väärin lausekkeen sisällä olevan lainauksen, mutta luulen, että sillä on jotain tekemistä sen kanssa, että lainausmerkit eivät ole osa arvomerkkijonoa - kun merkkijono on jo jäsennetty, lainausmerkit vain tulla tielle...? 2 vuotta sitten Molempien pitäisi toimia :(
luokkaaTestaus{ Julkinen toiminta sano hei Static() { Julkinen toiminta sano HelloConst() {
$obj= uusiTestaus(); 3 vuotta sitten Jotain mitä olen kokenut, mikä epäilemättä auttaa jotakuta. . . $html =<<<"EOD" Tämän käyttäminen näyttää kaikki saman värin: $html =<< mikä tekee sen kanssa työskentelystä paljon helpompaa 11 vuotta sitten Älä lue aikaisempia kommentteja päivämääristä säästääksesi mielesi ;) Kun molemmat merkkijonot voidaan muuntaa numeerisiksi (("$a" > "$b") -testissä), käytetään tuloksena saatuja numeerisia numeroita, muuten FULL-merkkijonoja verrataan merkki kerrallaan: var_dump("1.22"
>
"01.23"
);
//bool(false) (PHP 4, PHP 5, PHP 7) str_replace — Korvaa kaikki hakumerkkijonon esiintymät korvaavalla merkkijonolla Tämä funktio palauttaa merkkijonon tai taulukon, jossa kaikki aiheen haun esiintymiset korvataan sanalla korvaa. Jos monimutkaisia haku-/korvaussääntöjä (kuten säännöllisiä lausekkeita) ei tarvita, tämän toiminnon käyttö on suositeltavaa preg_replace(). Jos etsi ja korvaa ovat taulukoita, niin str_replace() käyttää kutakin arvoa vastaavasta taulukosta aiheen etsimiseen ja korvaamiseen. Jos korvaavassa taulukossa on vähemmän elementtejä kuin haussa, tyhjää merkkijonoa käytetään jäljellä olevien arvojen korvaavana merkkijonona. Jos haku on taulukko ja korvaa on merkkijono, tätä korvausmerkkijonoa käytetään jokaiselle hakutaulukon elementille. Käänteisessä tapauksessa ei ole järkeä. Jos etsi tai korvaa ovat taulukoita, niiden elementit käsitellään ensimmäisestä viimeiseen. Hakuarvo, joka tunnetaan myös nimellä neula (neula). Voit käyttää taulukkoa useille hakuarvoille. Korvata Korvausarvoa käytetään korvaamaan hakuarvot. Voit käyttää taulukkoa useille arvoille. Aihe Merkkijono tai taulukko, joka etsii ja korvaa, suoritetaan, joka tunnetaan myös nimellä heinäsuovasta (heinäsuovasta). Jos aihe on taulukko, haku ja korvaaminen suoritetaan jokaiselle aiheelementille, ja funktion tulos on myös taulukko. Tämä funktio palauttaa merkkijonon tai taulukon, jonka arvot on korvattu. Esimerkki #1 Käyttöesimerkkejä str_replace()
// antaa // määrittää: Hll Wrld f PHP // antaa: Sinun pitäisi syödä pizzaa, olutta ja jäätelöä joka päivä $uusi lause = str_korvaa($terve, $namia, $lause); // antaa: 2 Esimerkki #2 Esimerkkejä mahdollisista temppuista str_replace()
// Korvaava tilaus // Käsittelee \r\n ensin, jotta niitä ei korvata uudelleen. // Tulostaa F, koska A korvataan B:llä, sitten B C:llä ja niin edelleen... // Tulokset: applerootrootnut (edellä mainitusta syystä) Kommentti: Tämä toiminto on turvallista käsitellä tietoja binäärimuodossa. Varoitus
Koska str_replace() suorittaa korvaamisen vasemmalta oikealle, jolloin useita korvauksia käytettäessä se voi korvata aiemmin lisätyn arvon toisella. Kommentti: Katso myös esimerkkejä tällä sivulla. Tämä toiminto on kirjainkoon erottelukykyinen. Käyttää str_ireplace() Taulukot: 3 | OJSC Pyschpyshch | Soldatodachestroyskoe 404 3 | Suuri remontti 3 | 3 | 2 | | %teksti% Itse asiassa ongelma on, että kolmas taulukko pitäisi näyttää "tilausvalinta" -verkkolomakkeessa ja sinun on korvattava tunnuksen sijaan vastaavat kentät muista sarakkeista. Koodi: INSERT INTO "taulukon_nimi" ("luettelo") ARVOT ("bla-bla") Nowdoc-syntaksi
Muuttujien käsittely merkkijonoissa
Yhdistäminen
Syntaksi
Yksittäiset lainaukset
rivinvaihtohahmo kuten tämä,
Tämä on hyvä";
kaiku "Eräänä päivänä Arnold sanoi: "Tulen takaisin.";
echo "Poistitko C:\*.*?" ;
kaiku "Tätä ei laajenneta: \n uusi rivi";
kaiku "$expand ja $joko muuttujaa ei ole laajennettu";
?>
Tuplalainausmerkit
Pakojaksot
Jakso
Merkitys
\n
rivinvaihto (LF tai 0x0A (10) ASCII:ssa)
\r
vaunun paluu (CR tai 0x0D (13) ASCII:ssa)
\t
vaakasuora välilehti (HT tai 0x09 (9) ASCII:ssa)
\v
pystyvälilehti (VT tai 0x0B (11) ASCII:ssa) (PHP 5.2.5:stä lähtien)
\e
Escape-merkki (ESC tai 0x1B (27) ASCII:ssa) (PHP 5.4.4:stä lähtien)
\f
sivusyöte (FF tai 0x0C(12) ASCII:ssa) (PHP 5.2.5:stä lähtien)
\\
kenoviiva
\$
dollarin merkki
\"
kaksoislainaus
\{1,3}
merkkijono, joka vastaa oktaalimerkin säännöllistä lauseketta, joka vuotaa äänettömästi yli mahtuakseen tavuun (eli "\400" === "\000")
\x(1,2)
merkkijono, joka vastaa merkin säännöllistä lauseketta heksadesimaalimuodossa
\u(+)
merkkijono, joka vastaa Unicode-merkkien säännöllistä lauseketta, joka kartoitetaan UTF-8-esityksen merkkijonoon (lisätty PHP 7.0.0:aan)
Heredoc
julkinen $bar =<<
EOT;
// sisennys ennen sulkevaa tunnistetta ei ole sallittu
}
?>
julkinen $bar =<<
EOT;
}
?>
Esimerkki #3 Heredoc-merkkijonomäärittelyesimerkki
$str =
Esimerkkilinja,
{
käyttämällä heredoc-syntaksia.
EOD;
{
var $foo ;
var $bar ;
}
}
$this -> foo = "Foo" ;
$name = "Nimi" ; kaiku .
Nimeni on "$nimi". Kirjoitan $foo -> foo
EOT;
?>
Versiosta 5.3.0 lähtien staattisten muuttujien ja luokan ominaisuuksien/vakioiden alustaminen on tullut mahdolliseksi heredoc-syntaksin avulla:
{
Esimerkki #5 Heredocin käyttäminen staattisten muuttujien alustamiseen<<
Täällä ei ole mitään...
{
LABEL;<<
luokka foo
luokka foo
}
?>
Julkinen $baz =
Esimerkki #7 Esimerkki nowdocin käytöstä
Esimerkkiteksti,
kattaa useita rivejä
käyttämällä nowdoc-syntaksia. Kenoviivaa käsitellään aina kirjaimellisesti,
esimerkiksi \\ ja \".
Täällä ei ole mitään...
{
/* Monimutkaisempi esimerkki muuttujilla. */
julkinen $foo ;
{
var $foo ;
julkinen $bar ;
}
}
$this -> foo = "Foo" ;
$this -> bar = array("Bar1" , "Bar2" , "Bar3" );
Nimeni on "$nimi". Tulostan $foo->foo.
Nyt tulostan ($foo->bar).
EOT;
?>
julkinen $bar =<<<"EOT"
baari
EOT;
}
?>
nowdoc-tuki lisättiin PHP 5.3.0:aan.
) vähällä vaivalla.
echo "Hän joi $mehumehua." . PHP_EOL ;
echo "Hän joi mehua, joka oli valmistettu $mehuista." ;
?>
$mehut = array("omena" , "oranssi" , "koolaid1" => "violetti" );
echo "Hän joi $mehua [ 1 ] mehua." . PHP_EOL ;
echo "Hän joi $mehuja [ koolaid1 ] mehua." . PHP_EOL ;
julkinen $john = "John Smith" ;
julkinen $jane = "Jane Smith" ;
julkinen $robert = "Robert Paulsen" ;
}
echo " $people -> john sanoi sitten hei $peoplelle -> jane ." . PHP_EOL ;
echo "$people -> Johnin vaimo tervehti $peoplea -> robert." . PHP_EOL;
echo " $people -> robert tervehti kahta $ihmästä -> sepät." ; // Ei onnistu
?>
kaiku "Indeksin -2 merkki on yhtä suuri kuin$merkkijono [- 2 ]." , PHP_EOL ;
$merkkijono [- 3 ] = "o" ;
kaiku "Merkin muuttaminen sijainnissa -3 o:ksi tuottaa seuraavan rivin:$merkkijono." , PHP_EOL;
?>
Monimutkainen (kihara) syntaksi
// Näytä kaikki virheet
// Ei toimi, tulosteet: Tämä on (hieno)
// Toimii, tulosta: Tämä on hienoa
kaiku // Toimii"Tämä aukio on leveä
echo "Tämä toimii: ( $arr [ "avain" ]) " ;
echo "Tämä toimii: ( $arr [ 4 ][ 3 ]) " ;
// rivit. Toisin sanoen se toimii edelleen,
// mutta koska PHP etsii vakio foo ensin, tämä aiheuttaa
// tasovirhe E_NOTICE (määrittämätön vakio).
kaiku "Tämä on väärin:( $arr [ foo ][ 3 ]) " ;
// rivit käyttävät aina kiharoja aaltosulkeet
echo "Tämä toimii: ( $arr [ "foo" ][ 3 ]) " ;
echo "Tämä toimii: " . $arr [ "foo" ][ 3 ];
kaiku "Tämän getName() palauttaa: (getName())";
?>
var $bar = "Olen baari." ;
}
$bar = "bar" ;
$baz = array("foo" , "bar" , "baz" , "quux" );
echo " ( $foo -> $bar ) \n" ;
echo " ( $foo ->( $baz [ 1 ])) \n" ;
?>
// Näytä kaikki virheet
const virvoitusjuoma = "juuriolut" ;
julkinen staattinen $ale = "ipa" ;
}
$ipa = "Alexander Keith\"s" ;
echo "Haluaisin ($( oluet :: virvoitusjuoma )) \n" ;
echo "Haluaisin ($( beers :: $ale )) \n" ;
?>
Merkkijonon merkin käyttäminen ja muuttaminen
PHP:n merkkijonot ovat sisäisesti tavuja. Tästä syystä merkkijonon käyttäminen tai muokkaaminen siirtymällä ei ole turvallista monitavuiselle koodaukselle, ja se tulisi tehdä vain yksitavuisissa koodauksissa, kuten ISO-8859-1, oleville merkkijonoille.
PHP 7.1.0:sta lähtien tyhjän indeksin käyttö aiheuttaa aiemmin vakavan virheen, tässä tapauksessa merkkijono muunnettiin taulukoksi ilman varoitusta.
// Hanki merkkijonon ensimmäinen merkki
$ensimmäinen = $str [ 0 ];
// Hanki merkkijonon kolmas merkki
// Hae merkkijonon viimeinen merkki
$str = "Tämä on vielä testi." ;
, ilman varoitusta muutettiin muotoon
$str = "abc" ;
var_dump (isset($str [ "1" ]));
var_dump (isset($str [ "1.0" ]));
?>
Muunna merkkijonoksi
var_dump()
$foo = 1 + "-1.3e3" ; // $foo on kelluva (-1299)
$foo = 1 + "bob-1.3e3" ; // $foo on kokonaisluku (1)
$foo = 1 + "bob3" ; // $foo on kokonaisluku (1)
$foo = 1 + "10 pientä porsasta" ; // $foo on kokonaisluku (11)
$foo = 4 + "10,2 pientä possua" ; // $foo on kelluva (14.2)
$foo = "10.0 sikaa" + 1 ; // $foo on kelluva (11)
$foo = "10,0 sikaa" + 1,0 ; // $foo on kelluva (11)
?>
\n" ;
?>
Merkkijonotyypin toteutustiedot
END;
?>
Tämä ei:
END;
);
// syntaksivirhe, odottamaton ";"
?>
Ilman puolipistettä toimii hyvin:
LOPPU
);
?>
// Palauttaa merkkijono(17) "String array testi"
// Palautusmerkkijono(1) "S"
var_dump((taulukko) $a);
// Palauttaa array(1) ( => string(17) "String array testi")
// Palautusmerkkijono(17) "S"
luokkakoe(
julkinen $yksi = 1 ;
julkinen toiminto kaksi() (
paluu 2;
}
}
$testi = new Test();
echo "foo ( $test -> one ) bar ( $test -> two ())" ;
?>
Tulostaa "foo 1 bar 2".
luokkakoe(
const YKSI = 1;
}
echo "foo (Testi::ONE) bar" ;
?>
Tämä tulostaa "foo (Test::one) bar". Vakiot ja staattiset ominaisuudet edellyttävät merkkijonon hajottamista.
Harkitse:
$x = "0123" + 0;
$y = 0123 + 0;
echo "x on $x, y on $y"; //tulostaa "x on 123, y on 83"
toisin sanoen:
* lähdekoodin numeeristen literaalien etunollat tulkitaan "oktaaliksi", vrt. strtol().
* merkkijonojen etunollia (esim. käyttäjän toimittamat tiedot), kun ne on siirretty (implisiittisesti tai eksplisiittisesti) kokonaislukuun, jätetään huomiotta ja niitä pidetään desimaalilukuina, ks. strtod().
funktio _expr ($v ) (palauttaa $v ; )
$_expr = "_expr" ;
define("qwe" ,
"asd");
määritellä("zxc",
5
);
$b=
4
;
kaiku"ennen{
$_expr(1
+
2
)}
postata\n";
// tulostaa "pre 3 post"
kaiku"ennen{
$_expr(qwe)}
postata\n";
// tulostaa "pre asd post"
kaiku"ennen{
$_expr(c($a,
$b)+
zxc*
2
)}
postata\n";
// tulostaa "pre 17 post"
?>
"a"=>
"omena",
"b"=>
"banaani",
//jne
);
?>
hajoaa varmasti palasiksi.
Lausekkeissa, joissa vaaditaan merkkijono, muunnos tapahtuu automaattisesti."Tämä on a${
hedelmää[
"a"]}
"
;
// Monimutkainen syntaksi
Lausekkeissa, joissa vaaditaan merkkijono, muunnos tapahtuu automaattisesti."Tämä on a{
$hedelmä[
"a"]}
"
;
// Monimutkainen syntaksimuunnelma
?>
Pidän henkilökohtaisesti viimeistä muunnelmaa, koska se on luonnollisempi ja lähempänä sitä, miltä ilmaus olisi merkkijonon ulkopuolella.
julkinen staattinen$VAR=
"staattinen";
julkinen const VAR ="const";
kaiku"Hei:{
$tämä::
$VAR}
"
;
}
kaiku"Hei:{
$tämä::VAR)"
;
//Jäsennysvirhe: syntaksivirhe, odottamaton ")", odotetaan "["
}
}
$obj->
sano hei Static();
$obj->
sano HelloConst();
Editorissani tämä korostaa HTML:n ja $kommentin syntaksia:
$kommentti
Esimerkkilinja,
Esimerkkilinja,
var_dump("1.22.00"
>
"01.23.00"
);
//bool(tosi)
var_dump("1-22-00"
>
"01-23-00"
);
//bool(tosi)
var_dump((kellua)"1.22.00"
> (kelluke)"01.23.00"
);
//bool(false)
?>
Kuvaus
Luettelo parametreista
Palautusarvot
Esimerkkejä
$bodytag = str_replace ("%body%" , "musta" , "
$vokaalit = array("a" , "e" , "i" , "o" , "u" , "A" , "E" , "I" , "O" , "U" );
$onlyconsonants = str_replace ($vokaalit, "" , "Hello World of PHP" );
$lause = "Sinun pitäisi syödä hedelmiä, vihanneksia ja kuitua joka päivä.";
$terve = array("hedelmät" , "vihannekset" , "kuitu" );
$namia = array("pizza" , "olut" , "jäätelö" );
$str = str_replace ("ll" , "" , "hyvä kulta neiti molly!" , $count );
echo $count ;
?>
$str = "Line 1\nLine 2\rLine 3\r\nLine 4\n";
$order = array("\r\n" , "\n" , "\r" );
$korvaa = "
"
;
echo $newstr = str_replace ($järjestys, $korvaa, $str);
// Tämän seurauksena E korvataan F:llä, koska korvaus tapahtuu vasemmalta oikealle.
$haku = array("A" , "B" , "C" , "D" , "E" );
$korvaa = array("B" , "C" , "D" , "E" , "F" );
$aihe = "A" ;
echo str_replace ($haku, $korvaa, $aihe);
$kirjaimet = array("I" , "noin" );
$hedelmä = array("omena" , "pähkinä" );
$text = "Olen noin" ;
$tulostus = str_replace ($kirjaimet, $hedelmä, $teksti);
echo $lähtö ;
?>
Huomautuksia
Huomautus vaihtomenettelystä
kirjainkoolla ei ole merkitystä.
C_id | Yritys | Sijainti
1 | LLC Haku | Kudykinon kenttä 15/3
2 | JSC Elita | Slunysvalinsk 133/7
Korjaustyyppi (korjaustyypit)
r_id | Korjaustyypit |
1 | Vasara + naulat
2 | Kauneuden opastus
Tilausluettelo (luettelo)
l_id | Kuka | Mitä tarvitaan | Aika | Operaattorin kommentti
1 | 1 | 2 | %timestamp% | %operator_text%
2 | 2 | 1 | | %teksti%
Taulukko 1 sisältää luettelon asiakkaista.
Taulukko 3 sisältää luettelon operatiivisten ryhmien nykyisistä tilauksista. Tätä taulukkoa päivitetään säännöllisesti ja sen täyttämiseen käytetään verkkolomaketta. Koska tilauksia tulee melko paljon, taulukkoon syötetään tietueet asiakastunnuksen ja palvelun muodossa.
$query = "VALITSE *LISTA";
$tulos = mysql_query($kysely);
while($row=mysql_fetch_array($result. // ottaa tulokset jokaiselta riviltä
( echo "";// ulostulotiedot
}
CREATE TABLE "taulukon_nimi" ("id" int(255) NOT NULL AUTO_INCREMENT, "list" text (80) NOT NULL, PRIMARY KEY("id".
paras vastaus $kysely =
"
valitse yritykset.Yritys, korjaus_tyypit.Korjaustyypit, lista.kommentti_l
listalta
sisäiset liitosyritykset
luettelossa.Kuka = yritykset.c_id
sisäliitoksen korjaus_tyypit
luettelossa."Mitä tarvitsee" = korjaustyypit.r_id
";