Autor Zpráva
Kučik
Profil *
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
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
- 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 *
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 *
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
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
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 *
bohyn
aha:D, díky
bohyn
Profil
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 *
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
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
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
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
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
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 *
joe
proč get?
no protože dostanu kalendář a dostanu datum

ty velikosti písmen.. viz AM_
AM_
Profil
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 *
AM_
Tiško:D:D
Majkl578
Profil
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
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: