Nauč se s námi víc. Využij 50% bonus na e-learningové kurzy.
Pouze tento týden sleva až 80 % na e-learning týkající se Javy
discount week 50
Avatar
martinkobelka
Redaktor
Avatar
martinkobelka:13.8.2012 11:06

Zdravím
Ve svých scriptech používám při definování proměnné:

$chyba = ""

Ve scriptech jednoho programátora jsem ale viděl, jak používá

$chyba = (string) ""

V čem je ten druhý způsob lepší/horší?

 
Odpovědět
13.8.2012 11:06
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na martinkobelka
David Čápka:13.8.2012 11:12

Jedná se o explicitní uvedení typu, ale to u zakládání proměnné nemá žádný smysl.

Nahoru Odpovědět
13.8.2012 11:12
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
Kit
Redaktor
Avatar
Odpovídá na martinkobelka
Kit:13.8.2012 12:11

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.

Nahoru Odpovědět
13.8.2012 12:11
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
martinkobelka
Redaktor
Avatar
Odpovídá na Kit
martinkobelka:14.8.2012 13:50

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é.

 
Nahoru Odpovědět
14.8.2012 13:50
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na martinkobelka
David Čápka:14.8.2012 14:13

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);
?>
Nahoru Odpovědět
14.8.2012 14:13
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na martinkobelka
David Čápka:14.8.2012 14:14

Ale abych odpověděl na tvou otázku, to přetypování tam je k ničemu :)

Nahoru Odpovědět
14.8.2012 14:14
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
Kit
Redaktor
Avatar
Odpovídá na martinkobelka
Kit:14.8.2012 18:11
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.

Nahoru Odpovědět
14.8.2012 18:11
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Kit
Kit:14.8.2012 18:13

Chtěl jsem tím ukázat, že proměnná $chyba je v daném případě zbytečná.

Nahoru Odpovědět
14.8.2012 18:13
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.