Webexpo 2009 – eshop- změny

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
bojovyletoun
Člen | 667
+
0
-

ahoj, právě jsem se díval na to video z webexpa2009– eshop- banán, meloun.kiwi…

Akorát mě zajímá,
jak upravit klasický případ- uložení neinicalizované proměnné, protože ten způsob z přednášky se mi zdál špatný (3 krát opakování). Není jednodušší upřednostnit jednoduchost a dát tam @ před přiřazení?

function handleAdd($fruit){
$session=$this->getSession('cart');
if(isset($session->quantitity[$fruit])){
$session->quantity[$fruit]++;
}else{
$session->quantity[$fruit]=1;}
}

nestačilo by

function handleAdd($fruit){
$session=$this->getSession('cart');
@$session->quantity[$fruit]++;
}

neberte to jako nějaké vytýkání nebo něco takového, ale jako hledání nejlepšího způsobu, jak tuto situaci naprogramovat.

sodae
Nette Evangelist | 250
+
0
-

Zavináče se používají pouze ve výjimečných situacích

(Edit) Co takhle správně vybírat kategorii! Ne, opravdu kategorie dokumentace není ta správná

Editoval sodae (7. 11. 2010 19:52)

Vyki
Člen | 388
+
0
-

Jediné co by se na tom dalo kosmeticky upravi je

<?php
function handleAdd($fruit){
	$session=$this->getSession('cart');

	if(!isset($session->quantitity[$fruit]))
		$session->quantity[$fruit]=0;

	$session->quantity[$fruit]++;
}
?>

ale samozrějmě je úplně v pořádku kontrola neinicializované proměnné. PHP ti to sice dovolí, ale v Nette je to ošetřeno tak, aby to na tebe zařvalo když se snažíš přistoupit k něčemu neiinicializovanému. V jiných programovacích jazycích je to ve výchozím nastavení – to upozornění na neiinicializovanou proměnnou.

Jinak @ se používá opravdu jen ve vyjíměčných situacích, např. u funkcí pro manipulaci adresáři a soubory.

Editoval Vyki (7. 11. 2010 19:54)

h4kuna
Backer | 740
+
0
-

Zrovinka dneska jsem řešil něco podobného nebylo to se session, ale s normalní proměnnou. Taky by mě to zajímalo.

Můj názor

v tomto případě tam proběhne php magie :D

<?php
@$session->quantity[$fruit]++;
?>
  • kdy on to musi inicializovat jako int
  • a potom inkrementovat

a tady se na php nespoleháš a víš co se děje

<?php
if(isset($session->quantitity[$fruit])){
$session->quantity[$fruit]++;
}else{
$session->quantity[$fruit]=1;}
?>

taky se řídím pravidlem @ dávat minimálně