| 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: 17 let
|
|||
0