Php, ha a változó üres. Csallólap PHP-hez: FALSE, NULL és a hozzájuk kapcsolódó értékek. HAMIS az If állításokban

változó karakterlánc (12)

Van egy isNotEmpty függvényem, amely igazat ad vissza, ha a karakterlánc nem üres, és false-t, ha a karakterlánc üres. Rájöttem, hogy nem megy, ha áthúzok rajta egy üres sort.

Függvény isNotEmpty($input) ( $strTemp = $input; $strTemp = trim($strTemp); if(strTemp != "") //Megpróbálta ezt is: "if(strlen($strTemp) > 0)" ( true return ) return false ;

A karakterlánc ellenőrzése az isNotEmpty segítségével történik:

If(isNotEmpty($userinput["phoneNumber"])) ( //igazolja a telefonszámot ) else ( echo "A telefonszám nincs megadva
"; }

Ha a sor üres, különben nincs végrehajtva, nem értem miért, valaki tudna rávilágítani erre kérem.

Válaszok

ha van egy mezője, nevezetesen a serial_number, és szeretné ellenőrizni, hogy nincs-e üres hely

$soros_szám = trim($_POST); $q="select * from product where user_id="$_SESSION""; $rs=mysql_query($q); while($row=mysql_fetch_assoc($rs))(if(üres($_POST["vasak"]))( $vasak=$sor["termék1"]; )

így az összes cikluson keresztül ismételhetsz egy ciklusban egy másik üres függvénnyel

Nos, válasz helyett (azt hiszem, már megoldottad a problémádat), adok néhány tanácsot.

Nem tudom, hogy mindenki más, de engem személy szerint nagyon idegesít, amikor valami ilyesmit látok:

Ha(<>) ( true return; ) return hamis;

ehhez elegáns " visszatérés szükséges (<>); " Kérjük, mindig nézze meg a kódot, és távolítsa el ezt a logikát. Mert minden helyzetben nincs szüksége az IF utasításra.

Csak a saját is_string függvényemet írom a típusok ellenőrzésére, a strlen pedig a hossz ellenőrzésére.

Függvény emptyStr($str) ( return is_string($str) && strlen($str) === 0; ) print emptyStr("") ? "üres" : "nem üres"; // üres

EDIT: A trim funkcióval is ellenőrizheti, hogy egy karakterlánc nem tartalmaz-e.

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

A PHP-ben van egy üres() nevű beépített függvény. A teszt az if(empty($string))(...) php.net hivatkozás: php empty

Megvan a válasz, de a te esetedben használhatod

Üresen tér vissza($input);

Return is_string($input);

Egyszerű probléma. Változás:

If(strTemp != "")

If($strTemp != "")

Esetleg módosíthatod a következőre is:

If($strTemp !== "")

mivel a != "" igazat ad vissza, ha a PHP automatikus típuskonverziója miatt átadja a 0 számot és néhány más esetet.

Ne feledje, hogy a PHP-ben már van üres() függvény.

A PHP egy üres karakterláncot hamisra értékel, így egyszerűen használhatja:

If (trim($userinput["phoneNumber"])) ( // érvényesítse a telefonszámot ) else ( echo "A telefonszám nincs megadva
"; }

Mindig a regex-et használom az üres karakterláncok ellenőrzésére, amelyek a CGI/Perl és a Javascript idejére nyúlnak vissza, szóval miért ne lehetne például PHP-t (bár még nem tesztelt)

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

Ahol \S bármely karaktert jelöl szóközök nélkül

Csak használja a strlen() függvényt

If (strlen($s)) ( // nem üres )

Nemrég feltettem magamnak ugyanezt a kérdést.
Számos lehetséges megoldás létezik, itt van 3 érvényes:

  • s.indexOf(kezdő) === 0
  • s.substr(0,starter.length) === starter
  • s.lastIndexOf(starter, 0) === 0 (Mark Bayer válaszának megtekintése után hozzáadva)
  • hurok segítségével:

    A függvény startsWith(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; }

Nem találkoztam ez utóbbi megoldással, amely hurkot használ.
Meglepő módon ez a megoldás lényegesen jobb, mint az első 3.
Íme a jsperf teszt, amelyet lefuttatva erre a következtetésre jutottam: http://jsperf.com/startswith2/2

ps: Az ecmascript 6 (harmony) saját startsWith metódusát vezeti be a karakterláncokhoz.
Gondoljunk csak bele, mennyi időt spóroltak volna meg, ha gondolták volna, hogy ezt a nagyon szükséges módszert beépítik az első verzióba.

Frissítés

Vegye figyelembe, hogy Steve 2 ciklusoptimalizálást tartalmazott, a kettő közül az első jobb teljesítményt mutatott, ezért ezt a kódot alább közzéteszem:

A függvény startWith2(str, prefix) ( if (str.length< prefix.length) return false; for (var i = prefix.length - 1; (i >= 0) && (str[i] === előtag[i]); --i) folytatni;< 0; }

vissza i

A modern programozás már régóta sikeresen kezeli a típusolatlan változókat. A változó típusa előre nem adható meg, és a program végrehajtása során módosítható.

Ez a koncepció alapvetővé vált az általános programozási paradigmában. A programozási korszak legelején az ugyanolyan alapos magabiztossággal rendelkező nyelvek megkövetelték a programozótól, hogy előre definiáljon változókat, és szigorúan ügyeljen arra, hogy semmi illegálisat ne rendeljenek hozzájuk. Sem a programoknak, sem a programozási nyelveknek nem volt korábban fogalmuk arról, hogy egy változó megváltoztatja a típusát.

A PHP üres() függvény az isset() függvény inverze, és van néhány speciális használati jellemzője. Ha nincs változó, akkor az első függvény pozitívan válaszol és eredménye igaz, a második pedig negatívan, azaz értéke hamis lesz.

Definíció szerint az isset() egy változó létezésének ellenőrzésére szolgál. Teljesen mindegy, hogy mi és hogyan lett hozzárendelve a változó, a lényeg, hogy létezzen, és ne semmisítse meg az unset() függvény. Az isset() függvény eredménye pozitív – igaz. Fontos megjegyezni, hogy ha $iVar = 0; akkor isset($iVar) igaz lesz, de az üres($iVar) is igaz lesz.

Az első esetben az eredmény azt jelenti, hogy a változó létezik, a második esetben a változó üres, azaz a „0” érték bármilyen formában, legyen az karakterlánc („0”) vagy szám (tört - 0,0 vagy egész szám - 0) ugyanaz: üres ($iVar) igaz lesz.

A biztonságról és az ellenőrzésről

A gyakorlat azt mutatja, hogy a nem tipizált nyelvek sokkal nagyobb szabadságot adnak a programozónak, de feltételezzük, hogy az algoritmuson való munkához való hozzáállása felelősségteljesebb.

A PHP egy modern szintaxist kínál, amely támogatja a bevált szemantikát, kevés hibát tartalmaz, de gondos odafigyelést igényel. Például bármely függvény meghívásához bizonyos számú paraméterre van szükség.

Egy függvény meghívásakor egyáltalán nem szükséges az összes paramétert átadni, csak egy jelentős részt adhatunk át. A "must" függvény minden paraméter meglétét és meglétét ellenőrzi. A hiányzó vagy hibás értékeket vissza kell állítani normál formájukba, és hozzá kell rendelni a szükséges értékeket.

Ebben az összefüggésben a PHP üres() függvénye elengedhetetlen. Kifejezés:

$a = "1;2" + 20

a $a változóhoz 21 értéket rendel, mivel a kifejezés első része 1, a második pedig 20 lesz.

Az eredmény szám típusú lesz, és a PHP függvény üres($a) eredménye - false, vagyis a $a változó nem üres.

Ebben az összefüggésben a következő funkcióval rendelkezik:

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

Híváskor:

$res = funcTest($aVal, $bVal)

meglesz a kívánt, vagyis a függvény eredménye. És amikor hívják:

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

A függvénytörzs csak egy "$aVal . $bVal" értékű paramétert tartalmaz, és valószínűleg ez a paraméter karaktersorozatként lesz értelmezve.

PHP üres() objektumokhoz és tömbökhöz

A nyelvi szintaxis elegendő számú konstrukcióval és funkcióval rendelkezik az objektumokkal és tömbökkel való munkavégzéshez, de létezésük és értékmeglétük ellenőrzése szempontjából nincs különösebb eltérés a változókhoz képest.

PHP üres (tömb) - egyenértékű az üres hívással (egyszerű változó). Vannak azonban nagyon fontos megfontolások az objektumokkal kapcsolatban. Ami egy objektum létezésének (isset) ellenőrzését illeti, a kérdésnek aligha van értelme. Ami a PHP üres() függvényt illeti, használatának célszerűsége továbbra is kérdéses.

Az objektumorientált programozás logikája szerint egy objektumnak saját tartalma és saját metóduskészlete van. Csak maga az objektum tudja megmondani, hogy üres-e vagy sem, de nem egy harmadik fél függvénye, még akkor sem, ha a nyelv szintaxisának része.

Egy objektum és függvénye üres()

Ezen az egyszerű, de legitim alapon minden tárgyat az „üresség” értelmezésének kontextusában kell vizsgálni. Például a „Staffing table” objektum megvalósítása „Alkalmazott” rekordokból áll. De ha nincs egyetlen alkalmazott, akkor a „Személyzeti listán” mindig vannak lehetőségek a potenciális alkalmazottak pozícióira.

Milyen szinten használjam itt a PHP üres objektum függvényét? A "Személyzet" szinten minden létezik, még akkor is, ha nincs egyetlen alkalmazott sem. Az "Alkalmazott" szinten az objektum már létezik, még akkor is, ha nincs teljesen kitöltve. A nem teljesen kitöltött objektum besorolható üres objektumok közé. Semmi haszna nincs belőle a létszámtáblázatnak.

A programozási stílustól függően a PHP empty() és isset() függvényei nagyon fontosak egy biztonságos és megbízható algoritmus felépítéséhez, de az objektumok esetében még mindig jobb, ha az üres() függvényt a tartalma alapján határozzuk meg.

A PHP-ben a FALSE és NULL értékek, valamint a hozzájuk tartozó értékek eltérnek a többi nyelven megszokottól, és megvannak a maguk nem nyilvánvaló jellemzői.
A cikk ezeket a funkciókat tárgyalja.
Kezdőknek ez hasznos lehet a teljes kép látásához, a tapasztalt olvasóknak - a memória felfrissítésére, ha valami árnyalat kiesett a fejükből.

HAMIS az If állításokban

A PHP dokumentációja szerint a következő értékek HAMISOK a logikai értékre öntést követően:
  • maga a logikai érték HAMIS
  • egy üres karakterlánc ("") és a "0" karakterlánc.
  • üres tömb (tömb) – array().
  • nulla tagú változókkal rendelkező objektum (csak a PHP 4-nél, a cikk nem tárgyalja)
  • speciális NULL érték (beleértve a beállított változókat is)
  • SimpleXML objektumok (ez a cikk nem tárgyalja)
Ez azt jelenti, hogy ha ilyen értékeket adunk át a feltételnek:
ha (…) visszhangzik az „1”; egyébként visszhangja „0”;
akkor a "0" karakterlánc kerül kinyomtatásra.

Ha a változó értéke nincs beállítva (unset), akkor figyelmeztetés is megjelenhet. Emlékeztetünk arra, hogy a feltételben szereplő figyelmeztetés eltávolítható, ha a változó elé @ írunk.

Például:

Ha (@$undefVar) (…)
De a @-t csak szélsőséges esetekben érdemes használni, amikor alaposan átgondolta, és nincs más megfelelő lehetőség. Lásd isset() függvény.

Az is_null() függvény és a nyelvi konstrukciók isset() és empty()

Az is_null() csak olyan változók esetén adja vissza az IGAZ értéket, amelyekhez nincs hozzárendelve semmilyen érték, vagy amelyekhez NULL érték van hozzárendelve.
Az isset() egy az egyhez logikai értékeket ad vissza az is_null() függvényhez képest.
Ha a változóhoz nincs érték hozzárendelve, akkor az is_null() is "Nem definiált változó" figyelmeztetést ad, ellentétben az isset(), amely nem ad ki semmilyen figyelmeztetést.
Emlékezzünk vissza, hogy egy változó értékének eltávolításához használhatja az unset() függvényt. Erre a célra a NULL értéket is hozzárendelheti, hogy elkerülje a fordítói figyelmeztetéseket, amikor egy változó értékét próbálja beolvasni.

Vegye figyelembe, hogy a változókkal ellentétben a konstansokkal való munkához a definiált() konstrukciót kell használnia.

String reprezentáció

Nézzük meg a hamis állandók karakterlánc-ábrázolását.
Például az összefűzés az értékeket a következő sztringekké alakítja, az alábbi táblázatban látható módon:

A karakterláncokká konvertálás témáját részletesebben a hivatalos webhelyen a Konvertálás karakterláncsá című bekezdésben ismertetjük.

Összehasonlító operátorok

Térjünk át az összehasonlító operátorokra.
Minden hamis érték igazat ad vissza, ahogy az várható volt, ha összehasonlítjuk a FALSE értékkel a " == " operátor használatával.
De itt nem szabad a tranzitivitásra hagyatkozni, amikor hamis karakterlánc-állandókat hasonlítunk össze egymással.
Itt van egy teljes táblázat a hamis értékek összehasonlításához (plusz azokat a táblázatelemeket jelöli, amelyek a " != " operátorral összehasonlítva valódi értéket adnak vissza:

$undef – olyan változó, amelyhez nincs hozzárendelve érték

A táblázatból néhány kellemes következtetést lehet levonni:
1. Ha tudjuk, hogy csak karakterláncokat használunk, akkor nyugodtan összehasonlíthatjuk őket, és nem kell aggódnunk, hogy "" (üres karakterlánc) egyenlő lesz "0"-val.
2. A tömbök soha nem egyenlőek karakterláncokkal, egész számokkal vagy valós számokkal.

Mivel a különböző hamis állandók típusai eltérőek, megkülönböztetésükre egy === és !== operátorpár használható.
Az === operátor false értéket ad vissza minden hamis értékpár esetén.
Csak azokhoz az argumentumokhoz ad vissza igaz értéket, amelyek közül az egyikhez NULL, a másodikhoz pedig nincs érték.

Különbség a NULL értékű és a nem definiált változók között

Az === operátor lehetővé teszi az összes hamis érték megkülönböztetését, kivéve a NULL értékű változókat a nem értékkel rendelkező változóktól.

Az ilyen változókat a get_defined_vars() függvény segítségével lehet megkülönböztetni.

Ha meg kell határoznia, hogy van-e érték hozzárendelve a $var változóhoz, akkor a következő kódrészlet használható ehhez:
if (array_key_exists("var", get_defined_vars())) ( echo "var definiálva"; // $var NULL van hozzárendelve ) else ( echo "var NINCS definiálva"; // A $var nincs definiálva vagy unset($ var) hívták)

Következtetések

Mindig emlékeznie kell arra, hogy a PHP-ben előfordulhat, hogy két hamis érték nem egyezik meg egymással, és az első pillantásra eltérőnek tűnő változók összehasonlításkor azonosnak bizonyulhatnak. Az ilyen meglepetések elkerülése érdekében használhatja az === és !== operátorokat.

Ha tömbökkel dolgozik, a meglepetések elkerülése érdekében írhat egy függvényt, amely az értékeket garantáltan különböző indexekké konvertálja. Ezt követően a tömb elemei már csak a segítségével érhetők el. Ez lelassíthatja a programot, de segít elkerülni a meglepetéseket.

A tesztelést PHP 5.3.1-en végeztük.

További linkek

1. PHP típusú összehasonlító táblázatok.
2. MySQL Null és Empty Strings PHP környezetében.

Címkék: Címkék hozzáadása

A PHP-ben a FALSE és NULL értékek, valamint a hozzájuk tartozó értékek eltérnek a többi nyelven megszokottól, és megvannak a maguk nem nyilvánvaló jellemzői.
A cikk ezeket a funkciókat tárgyalja.
Kezdőknek ez hasznos lehet a teljes kép látásához, a tapasztalt olvasóknak - a memória felfrissítésére, ha valami árnyalat kiesett a fejükből.

HAMIS az If állításokban

A PHP dokumentációja szerint a következő értékek HAMISOK a logikai értékre öntést követően:
  • maga a logikai érték HAMIS
  • egy üres karakterlánc ("") és a "0" karakterlánc.
  • üres tömb (tömb) – array().
  • nulla tagú változókkal rendelkező objektum (csak a PHP 4-nél, a cikk nem tárgyalja)
  • speciális NULL érték (beleértve a beállított változókat is)
  • SimpleXML objektumok (ez a cikk nem tárgyalja)
Ez azt jelenti, hogy ha ilyen értékeket adunk át a feltételnek:
ha (…) visszhangzik az „1”; egyébként visszhangja „0”;
akkor a "0" karakterlánc kerül kinyomtatásra.

Ha a változó értéke nincs beállítva (unset), akkor figyelmeztetés is megjelenhet. Emlékeztetünk arra, hogy a feltételben szereplő figyelmeztetés eltávolítható, ha a változó elé @ írunk.

Például:

Ha (@$undefVar) (…)
De a @-t csak szélsőséges esetekben érdemes használni, amikor alaposan átgondolta, és nincs más megfelelő lehetőség. Lásd isset() függvény.

Az is_null() függvény és a nyelvi konstrukciók isset() és empty()

Az is_null() csak olyan változók esetén adja vissza az IGAZ értéket, amelyekhez nincs hozzárendelve semmilyen érték, vagy amelyekhez NULL érték van hozzárendelve.
Az isset() egy az egyhez logikai értékeket ad vissza az is_null() függvényhez képest.
Ha a változóhoz nincs érték hozzárendelve, akkor az is_null() is "Nem definiált változó" figyelmeztetést ad, ellentétben az isset(), amely nem ad ki semmilyen figyelmeztetést.
Emlékezzünk vissza, hogy egy változó értékének eltávolításához használhatja az unset() függvényt. Erre a célra a NULL értéket is hozzárendelheti, hogy elkerülje a fordítói figyelmeztetéseket, amikor egy változó értékét próbálja beolvasni.

Vegye figyelembe, hogy a változókkal ellentétben a konstansokkal való munkához a definiált() konstrukciót kell használnia.

String reprezentáció

Nézzük meg a hamis állandók karakterlánc-ábrázolását.
Például az összefűzés az értékeket a következő sztringekké alakítja, az alábbi táblázatban látható módon:

A karakterláncokká konvertálás témáját részletesebben a hivatalos webhelyen a Konvertálás karakterláncsá című bekezdésben ismertetjük.

Összehasonlító operátorok

Térjünk át az összehasonlító operátorokra.
Minden hamis érték igazat ad vissza, ahogy az várható volt, ha összehasonlítjuk a FALSE értékkel a " == " operátor használatával.
De itt nem szabad a tranzitivitásra hagyatkozni, amikor hamis karakterlánc-állandókat hasonlítunk össze egymással.
Itt van egy teljes táblázat a hamis értékek összehasonlításához (plusz azokat a táblázatelemeket jelöli, amelyek a " != " operátorral összehasonlítva valódi értéket adnak vissza:

$undef – olyan változó, amelyhez nincs hozzárendelve érték

A táblázatból néhány kellemes következtetést lehet levonni:
1. Ha tudjuk, hogy csak karakterláncokat használunk, akkor nyugodtan összehasonlíthatjuk őket, és nem kell aggódnunk, hogy "" (üres karakterlánc) egyenlő lesz "0"-val.
2. A tömbök soha nem egyenlőek karakterláncokkal, egész számokkal vagy valós számokkal.

Mivel a különböző hamis állandók típusai eltérőek, megkülönböztetésükre egy === és !== operátorpár használható.
Az === operátor false értéket ad vissza minden hamis értékpár esetén.
Csak azokhoz az argumentumokhoz ad vissza igaz értéket, amelyek közül az egyikhez NULL, a másodikhoz pedig nincs érték.

Különbség a NULL értékű és a nem definiált változók között

Az === operátor lehetővé teszi az összes hamis érték megkülönböztetését, kivéve a NULL értékű változókat a nem értékkel rendelkező változóktól.

Az ilyen változókat a get_defined_vars() függvény segítségével lehet megkülönböztetni.

Ha meg kell határoznia, hogy van-e érték hozzárendelve a $var változóhoz, akkor a következő kódrészlet használható ehhez:
if (array_key_exists("var", get_defined_vars())) ( echo "var definiálva"; // $var NULL van hozzárendelve ) else ( echo "var NINCS definiálva"; // A $var nincs definiálva vagy unset($ var) hívták)

Következtetések

Mindig emlékeznie kell arra, hogy a PHP-ben előfordulhat, hogy két hamis érték nem egyezik meg egymással, és az első pillantásra eltérőnek tűnő változók összehasonlításkor azonosnak bizonyulhatnak. Az ilyen meglepetések elkerülése érdekében használhatja az === és !== operátorokat.

Ha tömbökkel dolgozik, a meglepetések elkerülése érdekében írhat egy függvényt, amely az értékeket garantáltan különböző indexekké konvertálja. Ezt követően a tömb elemei már csak a segítségével érhetők el. Ez lelassíthatja a programot, de segít elkerülni a meglepetéseket.

Ha a karakterláncokkal végzett munka során ellenőrizni kell, hogy egy karakterlánc üres-e, a kezdő programozók általában ezt a funkciót használják. strlen(). Ez a függvény elég gyors, mert nem végez számításokat, hanem egyszerűen visszaadja a zvalban elérhető karakterlánchossz már ismert értékét (a PHP C struktúrát használ a változók tárolására). De mégis, mert strlen()- ez egy függvény, kicsit lassú, mert meghívásakor több műveletre van szükség, mint például a kisbetűsre konvertálás és a hash tábla keresése. Egyes esetekben növelheti a kód végrehajtási sebességét a használatával üres()..., hanem üres() Egy kicsit még lehet optimalizálni.

Vegyünk egy példát Például a kép útvonalának ellenőrzése, a függvény ellenőrzi, hogy az elérési út üres-e, majd lecseréli egy másik elérési útra, például „images/noimage.jpg”.

Így az egész feladat annak ellenőrzésére terjed ki, hogy egy karakterlánc típusú változó üres-e. Próbálkozzunk 4 módszerrel:

  • if(strlen($img_path)>0)
  • if($img_path(0))
  • if(üres($img_path))
  • és még egy út utoljára.

Tehát az első módon írjuk:

Függvény check_image_path($img_path ) ( if (strlen ($img_path ) >0 ) ( $img_path = "images/noimage.jpg" ; ) return $img_path ; )

Végezzünk tesztelést, az átlagos tesztidőbe telt 1.43795800209 mp.

Egy kicsit jobban belegondolva... Egyszerre elérheti a sor első karakterét, nem pedig az egész sort. Ha az első karakter ott van, akkor a karakterlánc nem üres. A sor első karaktere „0”-val van számozva.

Függvény check_image_path($img_path) ( if ($img_path ( 0 ) ) ( $img_path = "images/noimage.jpg" ; ) return $img_path ; )

átlagos tesztidőbe telt 1.19431300163 másodperc, a játékidő 17%-a

Próbáljunk most üres()-el írni:

Függvény check_image_path($img_path) ( if (üres ($img_path) ) ( $img_path = "images/noimage.jpg" ; ) return $img_path ; )

átlagos tesztidőbe telt 1.1341319084 másodperc, az előző példából lejátszott idő 5%-a

Most pedig nézzük a fenti utolsó előtti és utolsó példát. Lássuk, hogyan lehet ezt kombinálni. gondolkozz... hogyan lehetne még optimalizálni?

Függvény check_image_path($img_path) ( if (üres ($img_path ( 0 ) ) ) ( $img_path = "images/noimage.jpg" ; ) return $img_path ; )

átlagos tesztidőbe telt 1.07465314865 másodpercben, és ismét az esetek 5%-át nyertük...

Hogyan működik és miért gyorsabb? De $img_path(0) visszaadja az első karaktert..., majd a függvényt üres()üres karakterláncot ellenőrzi... a különbség az előző példához képest az, hogy csak egy karakter kerül átadásra a függvénynek, és nem a teljes karakterlánc. Így az első példától az utolsóig nyertünk 25% idő.