Diskuze: Rozdíl mezi isset a empty
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 7 zpráv z 7.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
php.net/isset | php.net/empty | php.net/language.types.boolean.php
isset zjistuje, zda promenna existuje
empty = isset + var!=false
"empty() is essentially the concise equivalent to !isset($var) || $var == false."
When converting to bool, the following values are considered false:
the boolean false itself
the integer 0 (zero)
the floats 0.0 and -0.0 (zero)
the empty string "", and the string "0"
an array with zero elements
the special type NULL (including unset variables)
SimpleXML objects created from attributeless empty elements, i.e. elements which have neither children nor attributes.
Cili, empty bys mel pouzit v pripade, ze vis, co dela, ze chces presne dosahnout toho, aby var nebyla empty.
U vetsiny app pracujes s db, tam je id radku autoincrement, min hodnota je 1.
Lze tedy pouzit empty.
Ale, v okamziku, kdy potrebujes ukladat treba i prazdne hodnoty "", tak se ti to
nehodi.
Nebo, pokud potrebujes pouze overit existenci hodnoty, obvykle $_POST, $_GET,
$_REQUEST nebo $_SESSION, tak pouzijes isset.
Proste, musis vedet, co delas, ceho chces docilit a podle toho si vyberes
vhodnou funkci. Pokud teda vis, co ty funkce delaji 
Kdyz nevis, pouzij radeji isset a zvlast si porovnavej $var!=="" &&
$var!==0.
A ano, u vetsiny prikladu a app najdes pouzite empty(). Ale, bud vi, co
delaji, nebo z 80% to psal nejaky nouma, co to obslohl z examplu a nahodou mu to
fungovalo pro vsechny jeho pripady, na ktere to testoval. A kdyz ne, tak to
povazoval za bezvyznamny bug 
Jinak, velke firmy pouzivaji jiny jazyk nez php. Mne je sice sympaticke, ale
kdyz je problem najit dobre placenou praci s primerenou pracovni zatezi, tak to
asi neni uplne ono.
$olej = 1;
if (empty($olej)){
echo "Proměnná je prázdná.";
}
else{
echo "Proměnná není prázdná a má hodnotu:".$olej;
}
echo "<br>";
$motor = 1;
if (isset($motor)){
echo "Proměnná je nastavnena a má hodnotu:".$motor;
}
else{
echo "Proměnná neni nastavena";
}
Díky za vysvětlení, ale když to porovnám k tomuto příkazu. Tak mi to přijde velmi podobné.
A ted tam del olej a motor = 0 nebo "". Rekneme, ze mas 2 policka, kde jedno musis vyplnit a druhe je description, ktere muze zustat prazdne.V tom pripade ti to pres empty neprojde, jako ok. Nicmene, to muze byt take tvuj zamer, protoze to vyresi dalsi kod, nejak.
Peter to napsal správně, ale ještě to shrnu:
isset(), jak vyplývá z názvu (Is set? – Je nastaven?), zjišťuje, zdali daná proměnná je nastavena, tj. jestli existuje. Vůbec ho nezajímá, jaká je v ní hodnota (s výjimkou null).
empty() zjišťuje, jestli proměnná neexistuje nebo je její hodnota false. Je to vlastně zkratka pro (!isset($var) || $var == false). Používá se místo ($var == false) ve chvíli, kdy si nejseš jistý, zdali $var existuje. Velmi často se používá také její negace !empty(), kde zjišťuješ, zda-li proměnná existuje a je true.
Pozor na to, že v PHP se za false považuje několik hodnot, konkrétně to je:
vše ostatní je bráno jako true. (Doufám, že jsem na nic nezapomněl
)
Tvůj příklad je poměrně nešikovný, protože na něm rozdíl není vůbec vidět.
$foo = 1;
$bar = 0;
isset($foo); // je true, protože proměnná foo existuje – byla deklarována na řádku 1
isset($bar) // je true, protože proměnná bar existuje – byla deklarována na řádku 2
isset($baz) // je false, protože proměnná baz neexistuje – nebyla deklarována
empty($foo); // je false, protože proměnná foo není false – obsahuje číslici 1
empty($bar) // je true, protože proměnná bar je false – obsahuje číslici 0
empty($baz) // je true, protože proměnná baz neexistuje – nebyla deklarována
($foo == false); // je false, protože proměnná foo není false – obsahuje číslici 1
($bar == false); // je true, protože proměnná bar je false – obsahuje číslici 0
($baz == false); // vyhodí varování "Notice: Undefined variable", protože proměnná baz neexistuje
Pozn. Od PHP 7 existuje ještě tzv. null coalesce operator ??, který
lze použít místo isset() – je to moc šikovné, ale je to vlastně jen
jiný zápis pro isset() a podmínku (resp. ternary operator), teď ti s tím
nebudu motat hlavu, ale až pochopíš isset(), tak se na to mrkni 
Upravil bych to jeste takto
<?php
error_reporting(E_ALL);
$foo = 1;
$bar = 0; // $bar = false; $bar = ""; $bar = "0"; ...
//$baZ
echo '<pre>';
var_dump(
isset($foo), // je true, protože proměnná foo existuje – byla deklarována na řádku 1
isset($bar), // je true, protože proměnná bar existuje – byla deklarována na řádku 2
isset($baZ), // je false, protože proměnná baz neexistuje – nebyla deklarována
'---',
empty($foo), // je false, protože proměnná foo není false – obsahuje číslici 1
empty($bar), // je true, protože proměnná bar je false – obsahuje číslici 0
empty($baZ), // je true, protože proměnná baz neexistuje – nebyla deklarována
'---',
($foo == false), // je false, protože proměnná foo není false – obsahuje číslici 1
($bar == false), // je true, protože proměnná bar je false – obsahuje číslici 0
($baZ == false) // vyhodí varování "Notice: Undefined variable", protože proměnná baz neexistuje
);
echo '</pre>';
?>
a vypise to...
( ! ) Notice: Undefined variable: baZ in C:\xampp\htdocs\www\test-isset-empty.php on line 21
Call Stack
# Time Memory Function Location
1 0.1977 392144 {main}( ) ...\test-isset-empty.php:0
C:\xampp\htdocs\www\test-isset-empty.php:21:boolean true
C:\xampp\htdocs\www\test-isset-empty.php:21:boolean true
C:\xampp\htdocs\www\test-isset-empty.php:21:boolean false
C:\xampp\htdocs\www\test-isset-empty.php:21:string '---' (length=3)
C:\xampp\htdocs\www\test-isset-empty.php:21:boolean false
C:\xampp\htdocs\www\test-isset-empty.php:21:boolean true
C:\xampp\htdocs\www\test-isset-empty.php:21:boolean true
C:\xampp\htdocs\www\test-isset-empty.php:21:string '---' (length=3)
C:\xampp\htdocs\www\test-isset-empty.php:21:boolean false
C:\xampp\htdocs\www\test-isset-empty.php:21:boolean true
C:\xampp\htdocs\www\test-isset-empty.php:21:boolean true
Zobrazeno 7 zpráv z 7.
