php, kui see pole tühi. Harjutage PHP tühja() funktsiooni kasutamist. Erinevus NULL muutujate ja määratlemata muutujate vahel

muutuv string (12)

Mul on funktsioon isNotEmpty, mis tagastab tõese, kui string pole tühi, ja false, kui string on tühi. Sain teada, et see ei tööta, kui annan tühja stringi läbi.

Funktsioon isNotEmpty($input) ( $strTemp = $sisend; $strTemp = trim($strTemp); if(strTemp != "") //Proovisin ka seda "if(strlen($strTemp) > 0)" ( return true ;) tagasta vale;)

Stringi kontrollitakse käsuga isNotEmpty:

If(isNotEmpty($userinput["phoneNumber"])) ( //telefoninumbri kinnitamine ) else ( echo "Telefoninumbrit pole sisestatud
"; }

Kui rida on tühi, muud ei täideta, ma ei saa aru, miks, kas keegi võiks seda veidi valgustada.

Vastused

kui teil on väli, nimelt seerianumber ja soovite kontrollida tühja ruumi olemasolu

$seeria_number = trimmi($_POST); $q="vali * tootest, kus user_id="$_SESSION""; $rs=mysql_query($q); while($row=mysql_fetch_assoc($rs))(if(empty($_POST["rauad"]))( $rauad=$rida["toode1"]; )

nii saate itereerida läbi kõik tsüklid tsüklis teise tühja funktsiooniga

Noh, selle asemel, et vastata (ma usun, et olete oma probleemi juba lahendanud), annan teile nõu.

Ma ei tea, kuidas kõik teised on, aga mind isiklikult ajab väga närvi, kui näen midagi sellist:

Kui(<>) ( return true; ) return false;

see nõuab elegantset " tagasitulekut (<>); ". Palun vaadake alati oma koodi ja eemaldage see loogika. Sest iga olukorras ei vaja te IF-lauset.

Kirjutan lihtsalt oma funktsiooni is_string tüübi kontrollimiseks ja strlen pikkuse kontrollimiseks.

Funktsioon emptyStr($str) ( return is_string($str) && strlen($str) === 0; ) print emptyStr("") ? "tühi" : "mitte tühi"; // tühi

EDIT: saate kasutada ka kärpimisfunktsiooni, et kontrollida, kas string sisaldab.

Is_string($str) && strlen(trim($str)) === 0;

PHP-l on sisseehitatud funktsioon nimega empty() Test tehakse, sisestades if(empty($string))(...) php.net viide: php empty

Teil on vastus, kuid teie puhul saate seda kasutada

return tühi($sisend);

Tagastus on_string($sisend);

Lihtne probleem. Muuda:

If(strTemp != "")

If($strTemp != "")

Võib-olla saate selle ka muuta järgmiselt:

If($strTemp !== "")

kuna != "" tagastab tõene, kui edastate PHP automaatse tüübikonversiooni tõttu numbrilise arvu 0 ja mõned muud juhtumid.

Samuti pidage meeles, et PHP-l on juba tühi() funktsioon.

PHP hindab tühja stringi valeks, nii et saate lihtsalt kasutada:

If (trim($userinput["phoneNumber"])) ( // kinnita telefoninumber ) else ( echo "Telefoninumbrit pole sisestatud
"; }

Kasutan tühja stringi testimiseks alati regexit, viidates nii CGI/Perli päevadele kui ka Javascriptile, nii et miks mitte näiteks PHP (kuigi testimata)

Return preg_match("/\S/", $sisend);

Kus \S tähistab mis tahes mittetühimärki

Kasutage lihtsalt funktsiooni strlen().

If (strlen($s)) ( // ei ole tühi )

Küsisin endalt hiljuti sama küsimuse.
Võimalikke lahendusi on mitu, siin on 3 kehtivat:

  • s.indexOf(starter) === 0
  • s.substr(0,starter.length) === starter
  • s.lastIndexOf(starter, 0) === 0 (lisatud pärast Mark Bayeri vastuse vaatamist)
  • kasutades silmust:

    Funktsioon algabWith(s,starter) ( for (var i = 0,cur_c; i< starter.length; i++) { cur_c = starter[i]; if (s[i] !== starter[i]) { return false; } } return true; }

Ma ei ole kohanud uusimat lahendust, mis kasutaks silmust.
Üllataval kombel on see lahendus märkimisväärselt parem kui kolm esimest.
Siin on jsperfi test, mille läbisin, et jõuda sellele järeldusele: http://jsperf.com/startswith2/2

ps: ecmascript 6 (harmony) tutvustab stringide jaoks oma startsWith meetodit.
Mõelge, kui palju aega oleks säästetud, kui nad oleksid mõelnud lisada selle väga vajaliku meetodi esimesse versiooni.

Värskenda

Pange tähele, et Steve kaasas 2 silmuse optimeerimist, millest esimene näitas parimat jõudlust, seega postitan selle koodi allpool:

Funktsioon algabWith2(str, prefiks) ( if (str. pikkus< prefix.length) return false; for (var i = prefix.length - 1; (i >= 0) && (str[i] === prefiks[i]); --i) jätka; tagasi i< 0; }

Kui stringidega töötades peate kontrollima, kas string on tühi, kasutavad algajad programmeerijad tavaliselt funktsiooni strlen(). See funktsioon on üsna kiire, kuna see ei teosta mingeid arvutusi, vaid lihtsalt tagastab stringi pikkuse juba teadaoleva väärtuse, mis on saadaval zvalis (PHP kasutab muutujate salvestamiseks C-struktuuri). Aga ikkagi, sest strlen() on funktsioon, on see pisut aeglane, kuna selle kutsumiseks on vaja mitut toimingut, näiteks väiketähti ja otsingut räsitabelis. Mõnel juhul saate koodi kiirendada kasutades tühi()..., aga ka tühi() saab veel natuke optimeerida.

Võtame näite Näiteks pildi tee kontroll, funktsioon kontrollib, kas tee on tühi, siis asendame selle teise teega, näiteks "images/noimage.jpg".

Ja nii taandubki kogu ülesanne kontrollimisele, kas stringi tüüpi muutuja on tühi. Proovime 4 võimalust:

  • if(strlen($img_path)>0)
  • if($img_path(0))
  • if(tühi($img_path))
  • ja veel üks viis lõpetamiseks.

Ja nii me kirjutame esimesel viisil:

Funktsioon check_image_path($img_path ) ( if (strlen ($img_path ) >0 ) ( $img_path = "images/noimage.jpg" ; ) return $img_path ; )

testime, testi keskmine aeg võttis 1.43795800209 sek.

Mõeldes veidi rohkem... Saate korraga juurde pääseda stringi esimesele märgile, mitte kogu stringile. Kui esimene märk on olemas, pole string tühi. Stringi esimene märk on nummerdatud alates "0".

Funktsioon check_image_path($img_path ) ( if ($img_path ( 0 ) ) ( $img_path = "images/noimage.jpg" ; ) tagastab $img_path ; )

keskmine testimise aeg 1.19431300163 sekundit, 17% mängitud ajast

Proovime nüüd tühja() kaudu kirjutada:

Funktsioon check_image_path($img_path ) ( if (empty ($img_path ) ) ( $img_path = "images/noimage.jpg" ; ) tagastab $img_path ; )

keskmine testimise aeg 1.1341319084 sek., 5% ajast võideti eelmisest näitest tagasi

Vaadake nüüd eelviimast ja viimast näidet meie kohal. Vaatame, kuidas seda kombineerida. mõtle... kuidas saab rohkem optimeerida?

Funktsioon check_image_path($img_path ) ( if (empty ($img_path ( 0 ) ) ) ( $img_path = "images/noimage.jpg" ; ) return $img_path ; )

keskmine testimise aeg 1.07465314865 sekundit ja võitis taas 5% ajast ...

Kuidas see töötab ja miks see on kiirem. Ja siin $img_path(0) tagastab esimese märgi... ja seejärel funktsiooni tühi() kontrollib tühja stringi... erinevus eelmisest näitest seisneb selles, et funktsioonile edastatakse ainult üks märk, mitte terve string. Seega võitsime esimesest näitest viimaseni 25% aega.

PHP-s erinevad väärtused FALSE ja NULL ning nendega seotud väärtused teistes keeltes tavapärastest ja neil on oma silmapaistmatud omadused.
Artiklis käsitletakse neid funktsioone.
Algajatele võib see olla kasulik tervikpildi nähtavuse jaoks, kogenud lugejatele - mälu värskendamiseks, kui mõni nüanss on peast välja lipsanud.

FALSE If-avaldistes

PHP dokumentatsiooni kohaselt on järgmised väärtused pärast tõeväärtuseks ülekandmist VÄÄRTUSED:
  • tõeväärtus ise FALSE
  • tühi string ("") ja string "0" .
  • tühi massiiv (massiiv) - array().
  • nullliikmeliste muutujatega objekt (ainult PHP 4, selles artiklis ei käsitleta)
  • spetsiaalne nullväärtus (sh määramata muutujad)
  • SimpleXML-objektid (selles artiklis ei käsitleta)
See tähendab, et kui sellised väärtused antakse tingimusele:
kui (...) kaja "1"; muidu kaja "0";
siis kuvatakse string "0".

Kui muutuja väärtus ei ole seatud (unset), võidakse anda ka hoiatus. Tuletage meelde, et tingimuse hoiatuse saab eemaldada, kirjutades muutuja ette @.

Näiteks:

Kui (@$undefVar) (…)
Kuid @-d tuleks kasutada ainult äärmuslikel juhtudel, kui olete hästi mõelnud ja muid sobivaid võimalusi pole. Vaadake funktsiooni isset().

Funktsioon is_null() ja keel konstrueerivad isset() ja empty()

is_null() tagastab väärtuse TRUE ainult nende muutujate puhul, millele pole väärtust määratud või millele on määratud väärtus NULL .
isset() tagastab ühe ühele vastupidised tõeväärtused, võrreldes väärtusega is_null().
Kui muutujale pole väärtust määratud, annab is_null() erinevalt isset()-st, mis hoiatust ei anna, ka hoiatuse "Määratlemata muutuja".
Tuletage meelde, et muutuja väärtuse eemaldamiseks võite kasutada funktsiooni unset(). Selleks saate määrata ka NULL-i, et vältida kompilaatori hoiatusi muutuja väärtuse lugemisel.

Pange tähele, et erinevalt muutujatest peate konstantidega töötamiseks kasutama konstruktsiooni defineeritud ().

stringi esitus

Vaatleme valede konstantide stringi esitust.
Näiteks ühendamisel teisendatakse väärtused järgmisteks stringideks, mis on näidatud allolevas tabelis:

Stringideks teisendamise teemat kirjeldatakse üksikasjalikumalt ametlikul veebisaidil jaotises Stringiks teisendamine .

Võrdlusoperaatorid

Liigume edasi võrdlusoperaatorite juurde.
Kõik valed väärtused tagastavad ootuspäraselt tõesed, võrreldes operaatori "==" abil väärtusega FALSE.
Kuid siin ei tohiks loota transitiivsusele, kui võrrelda valesid stringikonstante omavahel.
Siin on täielik valeväärtuste võrdlustabel (pluss tähistab tabeli elemente, mis operaatoriga " != " võrdlemisel tagastavad tõese väärtuse:

$undef on muutuja, millele pole väärtust määratud

Tabelist saab teha mõned meeldivad järeldused:
1. Kui teame, et kasutame ainult stringe, siis saame neid julgelt võrrelda ja mitte muretseda, et "" (tühi string) võrdub "0" .
2. Massiivid ei ole kunagi võrdsed stringide, täis- ja reaalarvudega.

Kuna erinevate valekonstantide tüüp on erinev, saate nende eristamiseks kasutada tehtepaari === ja !==.
Operaator === tagastab kõigi valeväärtuste paaride puhul väärtuse false.
Tagastab tõene ainult nende argumentide puhul, kus üks on seatud väärtusele NULL ja teisele ei ole määratud ühtegi väärtust.

Erinevus NULL muutujate ja määratlemata muutujate vahel

Operaator === võimaldab teil eristada kõiki valeväärtusi, välja arvatud NULL-väärtusega muutujad, ja muutujaid, millele pole väärtust määratud.

Selliseid muutujaid saab eristada funktsiooni get_defined_vars() abil.

Kui teil on vaja kindlaks teha, kas muutujale $var on määratud väärtus, saate selleks kasutada järgmist koodilõiku:
if (massiivi_võti_exists("var", get_defined_vars())) ( echo "var on defineeritud"; // $var on määratud NULL ) else ( echo "var EI ole defineeritud"; // $var ei ole defineeritud või unset($ var) kutsuti)

järeldused

Peaksite alati meeles pidama, et PHP-s ei pruugi kaks valet olla võrdsed ja muutujad, mis näivad olevat erinevad, võivad võrdluses osutuda samaks. Selliste üllatuste vältimiseks võite kasutada tehteid === ja !==.

Massiividega töötades saate üllatuste vältimiseks kirjutada funktsiooni väärtuste teisendamiseks garanteeritud erinevateks indeksiteks. Pärast seda pääseb massiivi elementidele juurde ainult selle abiga. See võib küll programmi aeglustada, kuid aitab vältida ootamatusi.

Testimine viidi läbi PHP 5.3.1-ga.

Täiendavad lingid

1. PHP tüüpi võrdlustabelid .
2. MySQL Null ja Empty Strings PHP kontekstis.

Sildid: lisa sildid

Kaasaegne programmeerimine on pikka aega ja edukalt manipuleerinud tüpimata muutujaid. Muutuja tüübi saab eelnevalt välja jätta ja seda saab programmi täitmise ajal muuta.

Sellest kontseptsioonist on saanud üldise programmeerimise paradigma peamine. Programmeerimisajastu alguses nõudsid sama põhimõttelise kindlusega keeled, et programmeerija deklareeriks eelnevalt muutujad ja tagaks rangelt, et neile ei määrataks midagi ebaseaduslikku. Asjaolu, et muutuja muudab oma tüüpi, polnud ei programmidel ega programmeerimiskeeltel varem aimugi.

Umbes tühjast ja olematust

PHP tühi() funktsioon on isset() pöördväärtus ja sellel on mõned kasutusomadused. Kui muutujat ei eksisteeri, siis esimene funktsioon vastab sellele positiivselt ja selle tulemus on tõene ning teine ​​negatiivselt, st selle väärtus on väär.

Definitsiooni järgi on isset() loodud muutuja olemasolu kontrollimiseks. Pole tähtis, mis ja kuidas muutuja omistati, peaasi, et see on olemas ja seda ei hävita unset() funktsioon. Funktsiooni isset() tulemus on positiivne – tõene. Oluline on meeles pidada, et kui $iVar = 0; siis isset($iVar) on tõene, kuid tühi($iVar) on samuti tõene.

Esimesel juhul tähendab tulemus muutuja olemasolu, teisel juhul on muutuja tühi, st väärtus "0" mis tahes kujul, olgu see siis string ("0") või arv ( murdosa – 0,0 või täisarv – 0) niikuinii: tühi($iVar) on tõene.

Turvalisuse ja kontrolli kohta

Praktika näitab, et trükkimata keeled annavad programmeerijale palju rohkem vabadust, kuid eeldatakse, et tema suhtumine algoritmi kallal töötamisse on vastutustundlikum.

PHP pakub kaasaegset süntaksit, mis säilitab väljakujunenud semantika, sisaldab vähe vigu, kuid nõuab hoolikat tähelepanu. Näiteks mis tahes funktsiooni kutsumine nõuab teatud arvu parameetreid.

Funktsiooni kutsumisel ei ole üldse vaja kõiki parameetreid edastada, edastada saab vaid olulise osa neist. Funktsioon "peab" kontrollib kõigi parameetrite olemasolu ja olemasolu. Need, mis puuduvad või millel on valed väärtused, tuleb viia normaalkujule, määrata neile soovitud väärtused.

Selles kontekstis on PHP tühi() funktsioon hädavajalik. Väljend:

$a = "1;2" + 20

määrab muutujale $a väärtuse 21, kuna avaldise esimene osa on 1 ja teine ​​osa on 20.

Tulemuseks on tüübinumber ja funktsioon PHP tühi($a) tagastab false, mis tähendab, et $a pole tühi.

Selles kontekstis on funktsioon:

funcTest ($a = 0, $b = 20)

Kui helistatakse:

$res = funcTest($aVal, $bVal)

sellel on see, mida soovite, st funktsiooni tulemus. Ja kui kutsutakse:

  • $res = funcTest($aVal. $bVal)

funktsiooni keha saab ainult ühe parameetri väärtusega "$aVal . $bVal" ja tõenäoliselt tõlgendatakse seda parameetrit märgistringina.

PHP tühi() objektide ja massiivide jaoks

Keele süntaksis on objektide ja massiividega töötamiseks piisav hulk konstruktsioone ja funktsioone, kuid nende olemasolu ja väärtuse olemasolu kontrollimise seisukohalt muutujatest erilisi erinevusi ei ole.

PHP tühi (massiiv) – samaväärne tühja kutsumisega (lihtne muutuja). Siiski on objektide puhul väga olulisi kaalutlusi. Mis puutub objekti olemasolu (isseti) kontrollimisse, siis sellel küsimusel on vaevalt mõtet. Mis puutub PHP tühja() funktsiooni, siis selle kasulikkus jääb küsitavaks.

Objektorienteeritud programmeerimise loogika kohaselt on objektil oma sisu ja oma meetodite komplekt. Ainult objekt ise saab öelda, kas see on tühi või mitte, kuid mitte kolmanda osapoole funktsioon, isegi kui see on osa keele süntaksist.

Objekt ja selle tühi() funktsioon

Sellel lihtsal, kuid õiguspärasel alusel tuleks iga objekti vaadelda selle "tühjuse" mõistmise kontekstis. Näiteks objekti "Personal" juurutus koosneb kirjetest "Töötaja". Kuid kui pole ühtegi töötajat, on jaotises "Personal" alati valikud potentsiaalsete töötajate ametikohtade jaoks.

Millisel tasemel kasutada siin PHP tühja objekti funktsiooni? "Personali" tasemel on kõik olemas, isegi kui pole ühtegi töötajat. "Töötaja" tasemel on objekt juba olemas, isegi kui see pole täielikult täidetud. Ja mitte täielikult täidetud objekti saab omistada tühjale objektile. Personalitabelisse sellest kasu pole.

Olenevalt valitud programmeerimisstiilist on PHP tühjad() ja isset() funktsioonid turvalise ja töökindla algoritmi koostamiseks väga olulised, kuid objektide puhul on siiski parem lasta oma tühi() variant defineerida selle sisu järgi.

PHP-s erinevad väärtused FALSE ja NULL ning nendega seotud väärtused teistes keeltes tavapärastest ja neil on oma silmapaistmatud omadused.
Artiklis käsitletakse neid funktsioone.
Algajatele võib see olla kasulik tervikpildi nähtavuse jaoks, kogenud lugejatele - mälu värskendamiseks, kui mõni nüanss on peast välja lipsanud.

FALSE If-avaldistes

PHP dokumentatsiooni kohaselt on järgmised väärtused pärast tõeväärtuseks ülekandmist VÄÄRTUSED:
  • tõeväärtus ise FALSE
  • tühi string ("") ja string "0" .
  • tühi massiiv (massiiv) - array().
  • nullliikmeliste muutujatega objekt (ainult PHP 4, selles artiklis ei käsitleta)
  • spetsiaalne nullväärtus (sh määramata muutujad)
  • SimpleXML-objektid (selles artiklis ei käsitleta)
See tähendab, et kui sellised väärtused antakse tingimusele:
kui (...) kaja "1"; muidu kaja "0";
siis kuvatakse string "0".

Kui muutuja väärtus ei ole seatud (unset), võidakse anda ka hoiatus. Tuletage meelde, et tingimuse hoiatuse saab eemaldada, kirjutades muutuja ette @.

Näiteks:

Kui (@$undefVar) (…)
Kuid @-d tuleks kasutada ainult äärmuslikel juhtudel, kui olete hästi mõelnud ja muid sobivaid võimalusi pole. Vaadake funktsiooni isset().

Funktsioon is_null() ja keel konstrueerivad isset() ja empty()

is_null() tagastab väärtuse TRUE ainult nende muutujate puhul, millele pole väärtust määratud või millele on määratud väärtus NULL .
isset() tagastab ühe ühele vastupidised tõeväärtused, võrreldes väärtusega is_null().
Kui muutujale pole väärtust määratud, annab is_null() erinevalt isset()-st, mis hoiatust ei anna, ka hoiatuse "Määratlemata muutuja".
Tuletage meelde, et muutuja väärtuse eemaldamiseks võite kasutada funktsiooni unset(). Selleks saate määrata ka NULL-i, et vältida kompilaatori hoiatusi muutuja väärtuse lugemisel.

Pange tähele, et erinevalt muutujatest peate konstantidega töötamiseks kasutama konstruktsiooni defineeritud ().

stringi esitus

Vaatleme valede konstantide stringi esitust.
Näiteks ühendamisel teisendatakse väärtused järgmisteks stringideks, mis on näidatud allolevas tabelis:

Stringideks teisendamise teemat kirjeldatakse üksikasjalikumalt ametlikul veebisaidil jaotises Stringiks teisendamine .

Võrdlusoperaatorid

Liigume edasi võrdlusoperaatorite juurde.
Kõik valed väärtused tagastavad ootuspäraselt tõesed, võrreldes operaatori "==" abil väärtusega FALSE.
Kuid siin ei tohiks loota transitiivsusele, kui võrrelda valesid stringikonstante omavahel.
Siin on täielik valeväärtuste võrdlustabel (pluss tähistab tabeli elemente, mis operaatoriga " != " võrdlemisel tagastavad tõese väärtuse:

$undef on muutuja, millele pole väärtust määratud

Tabelist saab teha mõned meeldivad järeldused:
1. Kui teame, et kasutame ainult stringe, siis saame neid julgelt võrrelda ja mitte muretseda, et "" (tühi string) võrdub "0" .
2. Massiivid ei ole kunagi võrdsed stringide, täis- ja reaalarvudega.

Kuna erinevate valekonstantide tüüp on erinev, saate nende eristamiseks kasutada tehtepaari === ja !==.
Operaator === tagastab kõigi valeväärtuste paaride puhul väärtuse false.
Tagastab tõene ainult nende argumentide puhul, kus üks on seatud väärtusele NULL ja teisele ei ole määratud ühtegi väärtust.

Erinevus NULL muutujate ja määratlemata muutujate vahel

Operaator === võimaldab teil eristada kõiki valeväärtusi, välja arvatud NULL-väärtusega muutujad, ja muutujaid, millele pole väärtust määratud.

Selliseid muutujaid saab eristada funktsiooni get_defined_vars() abil.

Kui teil on vaja kindlaks teha, kas muutujale $var on määratud väärtus, saate selleks kasutada järgmist koodilõiku:
if (massiivi_võti_exists("var", get_defined_vars())) ( echo "var on defineeritud"; // $var on määratud NULL ) else ( echo "var EI ole defineeritud"; // $var ei ole defineeritud või unset($ var) kutsuti)

järeldused

Peaksite alati meeles pidama, et PHP-s ei pruugi kaks valet olla võrdsed ja muutujad, mis näivad olevat erinevad, võivad võrdluses osutuda samaks. Selliste üllatuste vältimiseks võite kasutada tehteid === ja !==.

Massiividega töötades saate üllatuste vältimiseks kirjutada funktsiooni väärtuste teisendamiseks garanteeritud erinevateks indeksiteks. Pärast seda pääseb massiivi elementidele juurde ainult selle abiga. See võib küll programmi aeglustada, kuid aitab vältida ootamatusi.