Diskuze: definování datového typu v php
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Tvůrce

Zobrazeno 8 zpráv z 8.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Jedná se o explicitní uvedení typu, ale to u zakládání proměnné nemá žádný smysl.
Smyslem toho explicitního uvedení typu může být jakási forma funkčního komentáře. Programátor při prvním pohledu vidí, že proměnná $chyba je typu string.
Jinak to skutečně v daném případě smysl nemá, protože "" je vždy typu string.
Také mi uniká, proč do proměnné $chyba autor dává prázdný řetězec. Je totiž dobrým zvykem se snažit do každé proměnné přiřadit hodnotu pouze 1× a už ji nikdy neměnit. U řídící proměnné cyklu to samozřejmě nejde (proto se počítaným cyklům vyhýbám), ale v ostatních případech to zpřehlední aplikaci. Je pak i rychlejší a úspornější.
Zmíněný programátor zřejmě neumí pracovat s výjimkami, protože proměnná $chyba obvykle vůbec nemusí existovat a už vůbec se jí nemusí dávat prázdný řetězec.
Ukážu ti celý script, snad pochopíš, proč byla do proměnné uložená prázdná hodnota.
<?php
if(isset($_POST['odeslat']){
$chyba = (string) "";
if($_POST['jmeno'] == ""){
$chyba .= "Musíte zadat uživatelské jméno<br>";
}
if($_POST['heslo'] == ""){
$chyba .= "Musíte zadat heslo<br>";
}
if($_POST['heslo'] != $_POST['hesloznovu']){
$chyba .= "Neschodují s zadaná hesla";
}
if($chyba == ""){
//vložení do datáze, je moc dlouhé, tak to nebudu vypisovat
}
else{
echo $chyba;
}
?>
Mě napadlo si chybové hlášky ukládat do pole, a potom je případně vypsat pomocí implode, jen by byl problém asi zjistit, jestli je pole prázdné.
No to je hrůza. Když už, tak alespoň takhle:
<?php
if(isset($_POST['odeslat'])
{
$chyby = array();
if (!$_POST['jmeno'])
$chyby[] = "Musíte zadat uživatelské jméno";
if(!$_POST['heslo'])
$chyby[] = "Musíte zadat heslo";
if($_POST['heslo'] != $_POST['hesloznovu'])
$chyby[] = "NesHodují se zadaná hesla";
if (!$chyby)
{
//vložení do datáze, je moc dlouhé, tak to nebudu vypisovat
}
else
echo implode('<br />', $chyby);
?>
Ale abych odpověděl na tvou otázku, to přetypování tam je k ničemu
Vím, že to není úplně totéž, ale ve svých skriptech to píšu trochu jednodušeji:
<?php
if(isset($_POST['odeslat']){
if($_POST['jmeno'] == "")
throw new Exception("Musíte zadat uživatelské jméno");
if($_POST['heslo'] == "")
throw new Exception("Musíte zadat heslo");
if($_POST['heslo'] != $_POST['hesloznovu'])
throw new Exception("Neshodují se zadaná hesla");
//vložení do databáze, je moc dlouhé, tak to nebudu vypisovat
//Při ukládání může dojít k další výjimce
}
Ošetření výjimky může být i ve volající metodě nebo v indexu, proto jsem ho sem nedával.
Chtěl jsem tím ukázat, že proměnná $chyba
je v daném
případě zbytečná.
Zobrazeno 8 zpráv z 8.