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 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ářů: 0
dnes 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
dnes 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ářů: 0
dnes 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
dnes 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
včera 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
včera 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 377 hlasů
 Komentářů: 29, poslední dnes 18:00
Rozcestník
Reklama

Dotaz: Jak dostat do třídy instanci své třídy v php

13.10.2013 20:32 Jakub
Jak dostat do třídy instanci své třídy v php
Přečteno: 246×
Když vytvořím instanci třídy 'Ovoce'
$obj = Ovoce();
a z té třídy volám jiné třídy které potřebují instanci třídy 'Ovoce', existuje řešení jak to udělat? Děkuji

Odpovědi

13.10.2013 20:46 Kit
Rozbalit Rozbalit vše Re: Jak dostat do třídy instanci své třídy v php
Ano, uvnitř třídy použiješ speciální proměnnou $this.
13.10.2013 20:54 Jakub
Rozbalit Rozbalit vše Re: Jak dostat do třídy instanci své třídy v php
Myslel jsem to jinak, patrně jsem se špatně vyjádřil. Zkusím to lépe.

Vytvořím instanci
$obj = Ovoce();
v class Ovoce zavolám jinou class Zelenina
$obj2 = Zelenina();
a v class Zelenina potřebuji zavolat metodu v class Ovoce.

je to lépe k pochopení? Děkuji
13.10.2013 21:11 Kit
Rozbalit Rozbalit vše Re: Jak dostat do třídy instanci své třídy v php
Není to sice úplně triviální, ale budiž:
<?php
class Ovoce {
    private $atribut;
    private $obj2;

    function __construct($atribut){
        $this->atribut = $atribut;
        $this->obj2 = new Zelenina($this);
    }

    function getAtribut(){
        return $this->atribut;
    }

    function __toString() {
        return "Ovoce a $this->obj2";
    }
}

class Zelenina {
    private $ovoce;

    function __construct(Ovoce $ovoce){
        $this->ovoce = $ovoce;
    }

    function __toString() {
        return "zeleniny mám: " . $this->ovoce->getAtribut() . " kusů";
    }

}

$obj = new Ovoce(42);
echo $obj;
Výsledek:
Ovoce a zeleniny mám: 42 kusů
13.10.2013 22:28 Jakub
Rozbalit Rozbalit vše Re: Jak dostat do třídy instanci své třídy v php
Tak to je na pochopení už docela mazec :-( Musím si to pořádně rozebrat.. Děkuji

ještě tady mám úplně obyčejnou class, ze které opět nedostanu nic jiného než nadafinované proměnné na false. V každé metodě se uloží string který se ještě vypíše pokud tam vložím echo, ale v poslední metodě "show" už jsou zase všechny proměnné false, kde se to ztrácí? Děkuji
     class Test{
          private $item1 = false;
          private $item2 = false;
          private $item3 = false;
           public $show  = false;

          public function __construct(){
               $this->item1();
               $this->item2();
               $this->item3();
          }

          public function item1(){
               $this->item1 .= 'Text item1';
          }

          public function item2(){
               $this->item2 .= 'Text item2';
          }

          public function item3(){
               $this->item3 .= 'Text item3';
          }

          public function show(){
               $this->show .= $this->item1;
               $this->show .= $this->item2;
               $this->show .= $this->item3;
          }
     }

     $test = new Test();

     var_dump($test->show); // bool(false)
13.10.2013 22:43 Kit
Rozbalit Rozbalit vše Re: Jak dostat do třídy instanci své třídy v php
Kde voláš tu metodu show()? Podle mne nikde. Atributu $show zůstane původní hodnota. Kdo ti poradil, abys dělal atributy "public"? Mají být "private".

To je tedy nápad, pojmenovávat atributy stejně jako metody. Nedivím se, že v tom máš guláš.

A kdo ti poradil řetězit booleovskou hodnotu s řetězcem? Sice to tak nějak funguje, ale je to nesmysl.
13.10.2013 23:16 Jakub
Rozbalit Rozbalit vše Re: Jak dostat do třídy instanci své třídy v php
Kde voláš tu metodu show()? Podle mne nikde. Atributu $show zůstane původní hodnota.
Já jsem fakt pako :-(
Kdo ti poradil, abys dělal atributy "public"? Mají být "private".
Narážiš na tento zápis ?
public $show  = false;
Pokud ano, jak bych tu proměnnou pak vypsal?
A kdo ti poradil řetězit booleovskou hodnotu s řetězcem? Sice to tak nějak funguje, ale je to nesmysl.
tak jak to má být? Měl jsem za to, že když se jedná o inicializace proměnné je to fuk..
public $show  = '';
nebo
public $show  = "";
nebo úplně jinak
Díky
13.10.2013 23:21 Kit
Rozbalit Rozbalit vše Re: Jak dostat do třídy instanci své třídy v php
Nepotřebuješ obsah proměnné, ale metodu, která ti vypíše to, co potřebuješ. Proměnnou $show nepotřebuješ inicializovat, protože je úplně zbytečná. Vůbec tam nemusí být.
13.10.2013 23:16 Kit
Rozbalit Rozbalit vše Re: Jak dostat do třídy instanci své třídy v php
Ten tvůj příklad by v reálu asi vypadal mnohem jednodušeji:
<?php
class Test {
    private $item1 = 'Text item1';
    private $item2 = 'Text item2';
    private $item3 = 'Text item3';

    public function __toString() {
        return $this->item1 . $this->item2 . $this->item1;
    }
}
        
$test = new Test();
echo $test;
Všechno ostatní je tam jaksi "navíc" a není příliš patrné, proč to tam máš.

Vyhýbej se operátorům ".=" - nejsou moc efektivní a většinou ani nejsou potřebné.
13.10.2013 23:37 Jakub
Rozbalit Rozbalit vše Re: Jak dostat do třídy instanci své třídy v php
Všechno ostatní je tam jaksi "navíc" a není příliš patrné, proč to tam máš.
Byl to jen příklad, metody jsem tady nechtěl z důvodu přehlednosti rozvádět...

Když si vezmu cenné ponaučení a vycházím z původního příkladu, tak ted je to OK ? Děkuji

class Test{
          private $item1;
          private $item2;
          private $item3;

          public function __construct(){
               $this->item1();
               $this->item2();
               $this->item3();
          }

          public function item1(){
               $this->item1 = 'Text item1';
          }

          public function item2(){
               $this->item2 = 'Text item2';
          }

          public function item3(){
               $this->item3 = 'Text item3';
          }

          public function show(){
               $this->show = $this->item1.$this->item2.$this->item1;
          }

          public function __toString(){
               return show();
          }
     }

     $test = new Test();

     echo($test->show());
13.10.2013 23:55 Kit
Rozbalit Rozbalit vše Re: Jak dostat do třídy instanci své třídy v php
Metodu __toString() tam máš navíc, protože jsi ji nepoužil. U metody show() ti chybí return. Atribut $this->show je opět zbytečný.

Když místo posledních dvou metod budeš mít jen jednu
public function __toString(){
   return $this->item1.$this->item2.$this->item1;
}
tak vůbec nebudeš potřebovat volat metodu show()
$test = new Test();
echo($test);
Uvnitř objektu si udržuj atributy v atomickém stavu, ale vně objektu je prezentuj jako komplexní hotovou informaci, kterou k něčemu potřebuješ. Nesnaž se z vnějšku manipulovat s jednotlivými atributy, to je úkolem metod uvnitř objektu.
14.10.2013 00:12 Jakub
Rozbalit Rozbalit vše Re: Jak dostat do třídy instanci své třídy v php
Metodu __toString() tam máš navíc, protože jsi ji nepoužil.
jak to že jsem ji nepoužil? ta metoda se zpracuje přece vždy?
U metody show() ti chybí return.
Ano to je pravda, to co jsem napsal je nesmysl, čili se dvěma metodama asi takto (doufám)
public function show(){
  return $this->item1.$this->item2.$this->item1;
}

public function __toString(){
  return show();
}
Uvnitř objektu si udržuj atributy v atomickém stavu, ale vně objektu je prezentuj jako komplexní hotovou informaci, kterou k něčemu potřebuješ.
Vůbec netuším co je to atomický stav, musím pohledat a nastudovat...
Nesnaž se z vnějšku manipulovat s jednotlivými atributy, to je úkolem metod uvnitř objektu.
No a tohle jde úplně mimo mne. Absolutně nerozumím co se mi snažíš poradit...
14.10.2013 07:16 DarkKnight | skóre: 24
Rozbalit Rozbalit vše Re: Jak dostat do třídy instanci své třídy v php
metoda __toString() se zavola pouze v pripade, ze se pokusis vytisknout objekt (respektive kdyz ho pretypujes na string), proto ji mas zbytecnou (volas $objekt->show(), ne print $objekt)

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.