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í
×
včera 17:25 | IT novinky

Do prodeje (Farnell) se dostal jednodeskový počítač Tinker Board (unboxing). Jedná se o konkurenci Raspberry Pi 3 od společnosti Asus. Porovnání (jpg) těchto počítačů například na CNXSoft. Cena Tinker Boardu je 55 £.

Ladislav Hagara | Komentářů: 5
včera 14:44 | Zajímavý projekt

Byla zveřejněna pravidla hackerské soutěže Pwn2Own 2017, jež proběhne od 15. do 17. března v rámci bezpečnostní konference CanSecWes ve Vancouveru. Soutěžit se bude o více než milion dolarů v pěti kategoriích. Letos se bude útočit i na Ubuntu. Jedná se již o 10. ročník této soutěže.

Ladislav Hagara | Komentářů: 1
včera 13:33 | Nová verze

Po sedmi měsících vývoje od vydání verze 5.7 byla vydána verze 5.8 (YouTube) toolkitu Qt. Z novinek lze zmínit například Qt Lite pro vestavěná zařízení. Nově jsou plně podporovány moduly Qt Wayland Compositor (YouTube) a Qt SCXML (YouTube). Současně byla vydána verze 4.2.1 integrovaného vývojového prostředí (IDE) Qt Creator.

Ladislav Hagara | Komentářů: 1
včera 11:52 | Pozvánky

Lednový Prague Containers Meetup se koná ve čtvrtek 26. ledna 2017 od 18:00 v Apiary, Pernerova 49, Praha 8. Přijďte se podívat na přednášky o Enterprise Kubernetes a Jenkins as a code.

little-drunk-jesus | Komentářů: 0
včera 11:40 | Pozvánky

Program letošního ročníku konference Prague PostgreSQL Developer Days, která se koná již 15. a 16. února 2017 na ČVUT FIT, Thákurova 9, Praha 6, byl dnes zveřejněn. Najdete ho na stránkách konference včetně anotací přednášek a školení. Registrace na konferenci bude otevřena zítra (24. ledna) v brzkých odpoledních hodinách.

TomasVondra | Komentářů: 0
22.1. 02:20 | Zajímavý článek

David Revoy, autor open source webového komiksu Pepper&Carrot nebo portrétu GNU/Linuxu, upozorňuje na svém blogu, že nový Inkscape 0.92 rozbíjí dokumenty vytvořené v předchozích verzích Inkscape. Problém by měl být vyřešen v Inkscape 0.92.2 [reddit].

Ladislav Hagara | Komentářů: 0
22.1. 02:02 | Komunita

Øyvind Kolås, hlavní vývojář grafických knihoven GEGL a babl, které využívá grafický program GIMP, žádá o podporu na Patreonu. Díky ní bude moci pracovat na vývoji na plný úvazek. Milník 1000 $, který by stačil na holé přežití, se již téměř podařilo vybrat, dalším cílem je dosažení 2500 $, které mu umožní běžně fungovat ve společnosti.

xkomczax | Komentářů: 12
21.1. 23:54 | Pozvánky

DevConf.cz 2017, již devátý ročník jedné z největších akcí zaměřených na Linux a open source ve střední Evropě, proběhne od pátku 27. ledna do neděle 29. ledna v prostorách Fakulty informačních technologií Vysokého učení technického v Brně. Na programu je celá řada zajímavých přednášek a workshopů. Letos je povinná registrace.

Ladislav Hagara | Komentářů: 0
21.1. 22:11 | Nová verze

Byla vydána verze 1.0.0 emulátoru terminálu Terminology postaveného nad EFL (Enlightenment Foundation Libraries). Přehled novinek v poznámkách k vydání.

Ladislav Hagara | Komentářů: 0
20.1. 17:00 | Nová verze

Byl vydán Docker 1.13. Přehled novinek na YouTube a v poznámkách k vydání na GitHubu. Docker umožňuje běh aplikací v softwarových kontejnerech (Wikipedia).

Ladislav Hagara | Komentářů: 7
Jak se stavíte k trendu ztenčování přenosných zařízení (smartphony, notebooky)?
 (11%)
 (2%)
 (73%)
 (3%)
 (10%)
Celkem 386 hlasů
 Komentářů: 31, poslední včera 19:19
Rozcestník
Reklama

Dotaz: prepisovani funci - php

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

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.