Autor | Zpráva | ||
---|---|---|---|
Kučik Profil * |
#1 · Zasláno: 29. 4. 2009, 13:11:10
Snažil jsem se poučit z chyb které jste objevil v tom kalendáříku tak mám druhou verzi, zatím se stejnými skoro žádnými funkcemi ale myslím že už plnhodnotně oop:
index.php <?php function __autoload($Class){ $Class = strtolower($Class); require_once("classes/$Class.php"); } $CzechMonth = array(1 => "Leden", "Únor", "Březen", "Duben", "Květen", "Červen", "Červenec", "Srpen", "Září", "Říjen", "Listopad", "Prosinec"); $CzechDay = Array("Ne", "Po", "Út", "St", "Čt", "Pá", "So"); $Calendar = new GetCalendar(); foreach ($Calendar->Weekly() as $Date){ $Day = $Date->Day; $Month = $Date->Month; $Year = $Date->Year; $Today = $Date->Today; if ($Today == "1") { echo "<a href=\"#\">Dnes - {$Day} {$CzechMonth[$Month]} {$Year}</a><br>"; } else { $WeekDay = date("w", mktime(0, 0, 0, $Month, $Day, $Year)); echo "<a href=\"#\">{$CzechDay[$WeekDay]} - {$Day} {$CzechMonth[$Month]} {$Year}</a><br>"; } } ?> getcalendar.php <?php class GetCalendar { private $Day; private $Month; private $Year; public function __construct($Day=null, $Month=null, $Year=null){ if(isset($Day, $Month, $Year)){ if(ctype_digit($Day) and ctype_digit($Month) and ctype_digit($Year)){ if(checkdate($Month, $Day, $Year)){ $this->ThisDay = $Day; $this->Month = $Month; $this->Year = $Year; } else{ $this->Day = Date("j"); $this->Month = Date("n"); $this->Year = Date("y"); } } else{ $this->Day = Date("j"); $this->Month = Date("n"); $this->Year = Date("y"); } } else{ $this->Day = Date("j"); $this->Month = Date("n"); $this->Year = Date("y"); } } public function Weekly() { $WeeklyArray = array(); for ($x=0 ;$x<=6; $x++) { $ThisDate = new GetDate($this->Day+$x, $this->Month, $this->Year); array_push($WeeklyArray, $ThisDate); } return $WeeklyArray; } } ?> getdate.php <?php class GetDate { public $Day; public $Month; public $Year; public $Today; function __construct($Day=null, $Month=null, $Year=null) { if((!isset($Day)) or ($Day == $this->Day and $Month == $this->Month and $Year == $this->Year)){ $this->Day = $Day; $this->Month = $Month; $this->Year = $Year; $this->Today = "1"; } else{ $CountDays = date("t", mktime(0, 0, 0, $this->Month, 1, $this->Year)); if($Day > $CountDays){ $Day = $Day-$CountDays; $Month = ++$Month; if($Month == "13"){ $Year = ++$Year; $Month = "1"; } } $this->Day = $Day; $this->Month = $Month; $this->Year = $Year; $this->Today = "0"; } } } ?> |
||
AM_ Profil |
#2 · Zasláno: 29. 4. 2009, 15:00:42
konstruktor getcalendar - ty tři podmínky jsou dost zbytečnost, měl bys je spojit do jednoho ifu pomocí AND a to else tam mít jednou a ne třikrát.
|
||
bohyn Profil |
#3 · Zasláno: 29. 4. 2009, 15:52:51
- neni zbytecne definovat nove promene kdyz je pak jenom vypises?
$Day = $Date->Day; $Month = $Date->Month; $Year = $Date->Year; $Today = $Date->Today; - Proc se o pole $CzechMonth a $CzechDay nestara trida GetDate? - Tohle $Month = ++$Month; a tohle $Year = ++$Year je co? |
||
Kučik Profil * |
#4 · Zasláno: 29. 4. 2009, 16:07:07
bohyn
„- Proc se o pole $CzechMonth a $CzechDay nestara trida GetDate? “ Protože je to záležitost výpisu, prostě někdo může chtít celý dny atd.. tak nebude upravovat třídu ale jenom ten výpis „- Tohle $Month = ++$Month; a tohle $Year = ++$Year je co?“ $CountDays = date("t", mktime(0, 0, 0, $this->Month, 1, $this->Year)); if($Day > $CountDays){ $Day = $Day-$CountDays; $Month = ++$Month; if($Month == "13"){ $Year = ++$Year; $Month = "1"; } } Pokud je den větší než největší v měsíci tak se od něho odečte ten počet v měsíci.. tak když má měsíc 30 dní a ten den má 36 tak se napíše 6, jakože novej měsíc a proto musím aji k měsíci 1 číslo přičíst, pokud je měsíc číslo 13 tak je to už novej rok, tak mu nastavím 1 jako leden a k roku přičtu číslo |
||
Kučik Profil * |
#5 · Zasláno: 29. 4. 2009, 16:08:22
AM_
Díky :), zkráceno bohyn dík za ty definice, původně jsem s nimi chtěl pracovat ale pak jsem si to rozmyslel a zapoměl je smazat .. smazáno:) |
||
bohyn Profil |
#6 · Zasláno: 29. 4. 2009, 16:18:50
Kučik
„Pokud je den větší než největší v měsíci tak se od něho odečte ten počet v měsíci...“ Co to dela jsem pochopil, ale proc pouzivas inkrementalni operator zaroven s prirazenim do stejne promene? $Month++; by bohate stacilo. |
||
AM_ Profil |
#7 · Zasláno: 29. 4. 2009, 16:20:56
Ten konstruktor getdate je taky trochu divný. já bych ho napsal asi takhle:
function __construct($Day=null, $Month=null, $Year=null) { //implicitni prirazeni soucasneho data, pokud parametry nejsou uvedene if ($day === null) $day = date('j'); if ($month === null) $day = date('n'); if ($year === null) $day = date('Y'); $timestamp = mktime(0,0,0,$month,$day,$year); //vyresi posuny typu trinacty mesic, tricaty sesty den, ale i vetsi jako treba padesaty mesic nebo dvousty den //prirazeni do promennych tridy $this->Day = date('j', $timestamp); $this->Month = date('n', $timestamp); $this->Year = date('Y', $timestamp); //overeni dnesniho data $this->Today = (date('j-n-Y') == date('j-n-Y', $timestamp)) ? true : false; //boolean mi prijde lepsi nez tvoje retezcova '1' a '0' //lze zapsat i pouhe $this->Today = (date('j-n-Y') == date('j-n-Y', $timestamp)); jelikoz vysledek porovnani uz je boolean } Zkrátí se to asi na polovinu a bude to přehlednější a funkčnější. |
||
Kučik Profil * |
#8 · Zasláno: 29. 4. 2009, 16:21:13
bohyn
aha:D, díky |
||
bohyn Profil |
#9 · Zasláno: 29. 4. 2009, 16:51:27
Kučik
„Protože je to záležitost výpisu,...“ IMHO je to informace o danem dni, patri tedy do te tridy. „...prostě někdo může chtít celý dny atd.. tak nebude upravovat třídu ale jenom ten výpis“ Kdyz nebude chtit upravovat tridu, muze pouzit dedicnost. |
||
Kučik Profil * |
#10 · Zasláno: 29. 4. 2009, 17:01:03
AM_
Díky moc bohyn no ale když to mám <?php class GetDate { public $CzechMonth = array(1 => "Leden", "Únor", "Březen", "Duben", "Květen", "Červen", "Červenec", "Srpen", "Září", "Říjen", "Listopad", "Prosinec"); public $CzechDay = Array("Ne", "Po", "Út", "St", "Čt", "Pá", "So"); tak jak to tady zavolám echo "Dnes - {$Day} {$CzechMonth[$Month]} {$Year} (1)<br>"; ? |
||
bohyn Profil |
#11 · Zasláno: 29. 4. 2009, 17:08:38
Kučik
class GetDate { private $CzechMonth = array(1 => "Leden", "Únor", "Březen", "Duben", "Květen", "Červen", "Červenec", "Srpen", "Září", "Říjen", "Listopad", "Prosinec"); private $CzechDay = Array("Ne", "Po", "Út", "St", "Čt", "Pá", "So"); public __construct(/* ... */) { // ... $this->DayName = $this->CzechDay[date("w", $timestamp)]; $this->MonthName = $this->CzechMonth[$this->Month]; } } echo "Dnes - {$Date->Day} {$Date->MonthName} {$Date->Year} (1)<br>"; |
||
joe Profil |
#12 · Zasláno: 29. 4. 2009, 17:43:13
Kučik
Proč ti začínají názvy tříd na Get? Měl bys dodržovat nějakou konvenci, třeba proměnné začít psát malými písmeny a další slovo s velkým, třída naopak začíná s velkým. Jak bych pak poznal někde v kódu co je proměnná a co je přímo třída, když to obojí začíná na velké písmeno... Někdy píšeš array a někdy Array, tak se rozmysli ;-) |
||
AM_ Profil |
#13 · Zasláno: 29. 4. 2009, 18:22:40
„Jak bych pak poznal někde v kódu co je proměnná a co je přímo třída“
v PHP docela snadno když proměnné se prefixují dolarem. |
||
Majkl578 Profil |
#14 · Zasláno: 29. 4. 2009, 18:49:19
AM_
asi mysli instance. na to je vhodne mit editor, ktery ti ukaze typ promenne a pripadne i jakeho objektu je instanci (netbeans podporuje). |
||
AM_ Profil |
#15 · Zasláno: 29. 4. 2009, 18:51:11
Majkl578
To stejně požnáš, MyClass je třída a $MyClass je její instance :) MyClass::MyConst je konstanta, $MyClass->MyVar je proměnná dané instance, MyClass::$MyVar je statická proměnná... atd... prostě vždycky to požnáš, a funkci od proměnné zas odlišíš závorkama... |
||
Kučik Profil * |
#16 · Zasláno: 29. 4. 2009, 18:56:43
joe
proč get? no protože dostanu kalendář a dostanu datum ty velikosti písmen.. viz AM_ |
||
AM_ Profil |
#17 · Zasláno: 29. 4. 2009, 19:01:00 · Upravil/a: AM_
Kučik
Každá třída (krom statických) ti vrátí nějakou instanci něčeho, k čemu slouží, to je asi stejné jako pojmenovávat funkce třeba returnValue, returnTime atd... technická chyba to není, ale je to trochu zvláštní. |
||
Kučik Profil * |
#18 · Zasláno: 29. 4. 2009, 19:03:10
AM_
Tiško:D:D |
||
Majkl578 Profil |
#19 · Zasláno: 29. 4. 2009, 19:14:38
AM_
ve vetsich, plne oo projektech se to tak lehko poznat nemusi. kdyz mas treba $data jako instanci tridy UserProfileData apod... ale jo, souhlasim, casto se pojmenovavaji logicky (nebo se pouzije singleton ze :)) |
||
AM_ Profil |
#20 · Zasláno: 29. 4. 2009, 20:35:34
Majkl578
jo takhle, už chápu o čem se mluví. taky nepoužívám konvenci že by velkými písmeny byly objekty a malými proměnné, koneckonců ono to k sobě nemá daleko... Myslím, že inteligentní pojmenování identifikátorů udělá mnohem víc, než velikost písmen. |
||
Časová prodleva: 15 let
|
0