Autor Zpráva
Sunucuu
Profil
Zdravím,

omlouvám se za "zvláštní" titulek, ale lepší mě nenapadl. Pro názornost použiji velmi jednoduché příklady (V praxi jsou složitější a jejich víc).

Máme 2 třídy - _GET a _POST. Jsou vždy úplně stejné a liší se pouze tím, jestli se data zpracují přes $_GET nebo $_POST.

Nešlo by to nějak zjednodušit? Takto když dělám nějakou změnu, tak musím vždy upravovat každou třídu zvlášť... Zároveň nechci ztěžovat použití... (tzn, nepřidávat žádné parametry při volání static fce...).

Budu vděčný za jakoukoliv radu, či popostrčení...

Příkladový kód:
<?php

Class _POST {

  public static function get ($data){
    if (isset($_POST['page']))
    return $_POST['page'];
    else
    return false;
  }

}

Class _GET {

  public static function get ($data){
    if (isset($_GET['page']))
    return $_GET['page'];
    else
    return false;
  }

}

echo _POST::get('page');

echo _GET::get('page');

Moderátor Alphard: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
Spectator
Profil
Class _POST {
  public static function get ($data){ 
    if (isset($_POST[$data])) 
      return $_POST[$data]; 
    else 
      return false; 
  }
}
Class _GET {
  public static function get ($data){ 
    if (isset($_GET[$data])) 
      return $_GET[$data]; 
    else 
      return false; 
  }
}
echo _POST::get('page');
echo _GET::get('page');



Parametr navic by mohl být dobrý:
public static function get ($data, $method)

pak jen rozvětvi podle $method.
Alphard
Profil
Na úvod, ve většině frameworků, co jsem viděl, se to neodděluje do samostatných tříd, maximálně do různých metod třídy např. HttpRequest.

Ale jestli na tom trváte, je to možné.
abstract class Request 
{ 
  protected $arr;
  
  public function get($key)
  {
    if (isset($this->arr[$key]))
        return $this->arr[$key];
    else
        return false;
  } 
}

class Post extends Request
{
    public function __construct()
    {
        $this->arr = $_POST;
    }
}

$post = new Post;
echo $post->get('name');

S tím, že míto 'page' tam budou $data a zbavím se statických metod.

Doplňuji, pak si můžete různě hrát dál
  public function __get($name)
  {
    return $this->get($name);
  }
Sunucuu
Profil
Děkuji za názorné příklady, určitě mě to popostrčilo dál! :)


Alphard:
btw, mohu se zeptat na rozdíl mezi:
$this->arr =& $_POST;
a
$this->arr = $_POST;

Rád bych v tom měl jasno :)

Děkuji.
Alphard
Profil
Sunucuu:
Jsou to reference, předává se odkaz na objekt. Použítí zde jsem nedomyslel, nepřináší žádné výhody, jen nejsanosti. Z [#3] jsem to smazal.
Sunucuu
Profil
Děkuji za objasnění

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:

0