abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 06:00 | Zajímavý projekt

    Jack Dorsey představil (𝕏, Nostr) svůj nový projekt bitchat. Jedná se o bezpečnou decentralizovanou peer-to-peer aplikaci pro zasílání zpráv bez potřeby internetu, serverů a telefonních čísel. Využívá se Bluetooth Mesh Network. Detaily v technické dokumentaci. Zdrojové kódy jsou k dispozici pod licencí Unlicense.

    Ladislav Hagara | Komentářů: 3
    dnes 04:22 | Nová verze

    Hudební přehrávač Amarok byl vydán v nové verzi 3.3 "Far Above the Clouds". Nově je postaven na Qt6/KF6 a využívá GStreamer místo Phononu.

    Ladislav Hagara | Komentářů: 0
    včera 18:11 | IT novinky

    Společnost IBM představila novou generaci svých serverů: IBM Power11.

    Ladislav Hagara | Komentářů: 1
    včera 15:33 | Komunita

    Multiplatformní digitální pracovní stanice pro práci s audiem Ardour byla postavena na GTK2. Vývojáři neplánovali její portaci na GTK3 nebo GTK4. Naopak, v lednu loňského roku si vytvořili vlastní fork GTK2 s názvem YTK. Ten v únoru letošního roku přestal být volitelným a nově byla zcela odstraněna podpora GTK2.

    Ladislav Hagara | Komentářů: 16
    včera 11:33 | Nová verze

    Byla vydána nová verze 6.4 linuxové distribuce Parrot OS (Wikipedie). Jedná se o linuxovou distribuci založenou na Debianu a zaměřenou na penetrační testování, digitální forenzní analýzu, reverzní inženýrství, hacking, anonymitu nebo kryptografii. Přehled novinek v příspěvku na blogu.

    Ladislav Hagara | Komentářů: 0
    včera 11:22 | Pozvánky

    Společnost initMAX pořádá sérii bezplatných webinářů věnovaných novému Zabbixu 7.4. Podrobnosti a registrace na webu initMAX.

    … více »
    Heřmi | Komentářů: 0
    včera 03:44 | Nová verze

    Byla vydána verze 7.0 open source platformy pro správu vlastního cloudu OpenNebula (Wikipedie). Kódový název nové verze je Phoenix. Přehled novinek v poznámkách k vydání v aktualizované dokumentaci.

    Ladislav Hagara | Komentářů: 1
    včera 00:11 | Nová verze

    E-mailový klient Thunderbird byl vydán ve verzi 140.0 ESR „Eclipse“. Jde o vydání s dlouhodobou podporou, shrnující novinky v upozorněních, vzhledu, správě složek a správě účtů. Pozor, nezaměňovat s průběžným vydáním 140.0, které bylo dostupné o týden dříve.

    Fluttershy, yay! | Komentářů: 15
    7.7. 15:11 | IT novinky

    Organizace Video Games Europe reprezentující vydavatele počítačových her publikovala prohlášení k občanské iniciativě Stop Destroying Videogames.

    Ladislav Hagara | Komentářů: 0
    7.7. 13:22 | IT novinky

    Společnost Raspberry Pi nově nabzí Raspberry Pi Camera Module 3 Sensor Assembly, tj. samostatné senzorové moduly z Raspberry Pi Camera Module 3.

    Ladislav Hagara | Komentářů: 0
    Jaký je váš oblíbený skriptovací jazyk?
     (59%)
     (27%)
     (7%)
     (2%)
     (1%)
     (1%)
     (3%)
    Celkem 375 hlasů
     Komentářů: 16, poslední 8.6. 21:05
    Rozcestník

    Dotaz: prepisovani funci - php

    1.3.2013 17:18 Pavel80
    prepisovani funci - php
    Přečteno: 750×

    Ahoj, je mozne prepsat funkci? Něco jako bych si vytvořit instanci třídy Kniha, a chtěl aby mi vždy vracela jako název nastavený text. Nějak podobne jako to lze třeba v javě?
    $kniha = new Kniha() {
    public function getNazev() {
    return "novy nazev";
    }
    }

    a potom vždy když by se zavolalo: $kniha->getNazev() dostal bych "novy nazev". Je neco takoveho v php mozne? a jak na to? díky.

    Odpovědi

    Tarmaq avatar 1.3.2013 17:28 Tarmaq | skóre: 39
    Rozbalit Rozbalit vše Re: prepisovani funci - php
    class Kniha
    {
      public function getNazev()
      {
        return "novy nazev";
      }
    }
    $kniha = new Kniha();
    echo $kniha->getNazev();
    
    Predpokladam ale, ze ten nazev tam chces strkat zvenku:
    class Kniha
    {
      public function __construct($nazev)
      {
        $this->nazev = $nazev;
      }
      private $nazev;
      public function getNazev()
      {
        return $this->nazev;
      }
    }
    $kniha = new Kniha("novy nazev");
    echo $kniha->getNazev();
    
    Don't panic!
    1.3.2013 17:28 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: prepisovani funci - php
    Cože?
    <?php
    class Kniha{
      private $name;
      public function __construct($name) {
        $this->name = $name;
      }
      public function getName(){
        return $this->name;
      }
    }
    $kniha = new Kniha("Alenka v říši divů");
    echo $kniha->getName();
    
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    1.3.2013 18:06 Pavel80
    Rozbalit Rozbalit vše Re: prepisovani funci - php
    díky, ale tohle jsem zrovna nemyslel. Právě ani nevím, jestli to, co chci, php umí.

    1)
    Budu mít třídu kniha - nechci do ní nic setovat přes konstruktor ani přes žádnou jinou funkci.
    Pak budu mít třídu Knihovna, ve které je vytovřena instance třídy Kniha.
    Pouze v té třídě Knihovna chci, aby funkce getNazev() z třídy Kniha vždy vracela třeba "XXX". Takže pouze pro tuto instanci knihy chci upravit fungování funkce getNazev().

    2)
    Nebo pokud bych to vzal přes jiný příklad s abstraktní funkcí. Kniha bude abstraktní třída a getNazev() bude abstraktní funkce.
    Je možné vytvořit v php instanci abstraktní třídy Kniha bez toho, abych si nejprve vytvořil třídu "KnihaImplementace extends Kniha"? Ale přímo s tou abstraktní třídou udělal $kniha = new Kniha() a nyní ji teprve nějak doimplementoval fungování metody getNazev()? Doimplemetoval bych tedy tu funkci getNazev teprve ve třídě Knihovna (případně všude, kde by byla vytvářena její nová instance).
    1.3.2013 18:48 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: prepisovani funci - php
    Jo tyhle prasárny :), nevím od které verze:
    <?php
    date_default_timezone_set('Europe/Prague');
    
    class Kniha{
      private $name;
      public function __construct($name) {
        $this->name = $name;
      }
    
      public function __call($method, $args){
        if(isset($this->$method)){
          $func = $this->$method;
          $func($args);
        }
      }
    
      public function getName(){
        return $this->name;
      }
    }
    
    $kniha = new Kniha("Alenka v říši divů");
    echo $kniha->getName(),"
    \n"; $kniha->prnOnTheFly = function(){ echo "Alenka flying"; }; $kniha->prnOnTheFly(); echo "
    \n"; $kniha2 = new Kniha("Alenka v říši divů 1½"); $kniha2->prnOnTheFly();//nic se nestane echo "
    \n";
    Ale je to zjednodušené a může to mít nějaké vedlejší efekty viz __call.
    Nemám s tím zkušenosti, takže to nebudu ladit…
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    1.3.2013 20:31 Pavel80
    Rozbalit Rozbalit vše Re: prepisovani funci - php
    To asi budu to, co jsem chtěl. Díky.
    2.3.2013 12:47 Logik
    Rozbalit Rozbalit vše Re: prepisovani funci - php
    Hmmm, nechtěl bys sem dát konkrétní případ, co řešíš? Zdá se mi totiž, že pokud toto potřebuješ, tak máš s dost velkou pravděpodobností chybu v návrhu.

    Pokud chceš dělat takovýdle opičárny s libovolnou knihou, proč v třídě kniha rovnou neuděláš podporu pro to, co tam pak chceš za běhu "dohackovat"? Pokud to chceš dělat pouze s knihama v knihovně, proč si neuděláš potomka knihy, kde to vyřešíš elegantně?

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.