Autor Zpráva
Darker
Profil
Potřebuju deklarovat poměrně velký počet tříd, které se povětšinou liší jednou či dvěma metodami.
Takže šablona jedné z nich by mohla vypadat třeba takhle:
class CmdCommand {        
     private $language = "en"; 
     function __construct($path) {
          $this->path=realpath($path);
     }
     public function call(array $args) {
                      /*tady to bude pokaždé jiné*/
     }
     public function help() {
           return $this->help[$this->language];
        }
       public function path($escape=0,$path="") {
        /* Getter pro vlastnost path*/
      }
}
A jedna z mnoha tříd by pak vypadala takhle:
class cmd_cd zešablony CmdCommand {
  private $help = array(
           "en" => "Change current directory."
  );          
  public function call(array $args) {
             /** něco provede **/
  }
}
Nejdřív jsem používal implements, to je mi ale úplně k ničemu. Pomocí extends se mi zas nevytvořily vlastnosti, a nebo se nechovaly tak, jak bych čekal. Vypadalo to trochu jako by byly v namespace té původní třídy.
Keeehi
Profil
Správně je extends.
Implements je na rozhraní.
Darker
Profil
Keeehi:
Správně je extends.
No dobře, proč tedy nedělá, co chci?
Keeehi
Profil
Darker:
Jak to můžu vědět? To co chceš, aby to dělalo, to to normálně dělá. Asi to máš rozbité.
Alphard
Profil
Jak do toho mícháte namespace? Nechápu.
Nebude problém v tom, že používáte výhledně private nebo public?
Darker
Profil
Keeehi:
V extends opravdu chyba nebyla. Kde byla zatím nevím, ale skript vytvořený mimo funguje, jak má.

Alphard:
Chtěl jsem tím naznačit, že skript hlásil, že vlastnost neexistuje, ačkoli v nadřazené třídě byla. A zmizel mi kurzor tady v editoru. Moc se mi to nelíbí.


Tak nefunguje. Pokud se snažím volat metodu help, která se hrabe ve vlastnosti help, hlásí to, že se k ní nemůže dostat protože je private. Což znamená že ty třídy nejsou tak propojené, jak bych chtěl.
juriad
Profil
podívej se na rozdíl mezi private a protected
správný modifikátor přístupu u $language je protected

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