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 22:00 | IT novinky

    Uživatelé komunikátoru Signal si mohou svá data přímo v Signalu bezpečně zálohovat a v případě rozbití nebo ztráty telefonu následně na novém telefonu obnovit. Zálohování posledních 45 dnů je zdarma. Nad 45 dnů je zpoplatněno částkou 1,99 dolaru měsíčně.

    Ladislav Hagara | Komentářů: 0
    včera 18:44 | Zajímavý článek

    Server Groklaw, zaměřený na kauzy jako právní spory SCO týkající se Linuxu, skončil před 12 lety, resp. doména stále existuje, ale web obsahuje spam propagující hazardní hry. LWN.net proto v úvodníku připomíná důležitost zachovávání komunitních zdrojů a upozorňuje, že Internet Archive je také jen jeden.

    Fluttershy, yay! | Komentářů: 1
    včera 14:22 | Nová verze

    Jakub Vrána vydal Adminer ve verzi 5.4.0: "Delší dobu se v Admineru neobjevila žádná závažná chyba, tak jsem nemusel vydávat novou verzi, až počet změn hodně nabobtnal."

    Ladislav Hagara | Komentářů: 1
    včera 13:22 | IT novinky

    V Německu slavnostně uvedli do provozu (en) nejrychlejší počítač v Evropě. Superpočítač Jupiter se nachází ve výzkumném ústavu v Jülichu na západě země, podle německého kancléře Friedricha Merze otevírá nové možnosti pro trénování modelů umělé inteligence (AI) i pro vědecké simulace. Superpočítač Jupiter je nejrychlejší v Evropě a čtvrtý nejrychlejší na světě (TOP500). „Chceme, aby se z Německa stal národ umělé inteligence,“ uvedl na

    … více »
    Ladislav Hagara | Komentářů: 11
    7.9. 04:11 | Komunita

    V Berlíně probíhá konference vývojářů a uživatelů desktopového prostředí KDE Plasma Akademy 2025. Při té příležitosti byla oznámena alfa verze nové linuxové distribuce KDE Linux.

    Ladislav Hagara | Komentářů: 1
    6.9. 17:11 | Nová verze

    Byl vydán Debian 13.1, tj. první opravná verze Debianu 13 s kódovým názvem Trixie a Debian 12.12, tj. dvanáctá opravná verze Debianu 12 s kódovým názvem Bookworm. Řešeny jsou především bezpečnostní problémy, ale také několik vážných chyb. Instalační média Debianu 13 a Debianu 12 lze samozřejmě nadále k instalaci používat. Po instalaci stačí systém aktualizovat.

    Ladislav Hagara | Komentářů: 2
    5.9. 23:44 | IT novinky

    Evropská komise potrestala Google ze skupiny Alphabet pokutou 2,95 miliardy eur (71,9 miliardy Kč) za porušení antimonopolní legislativy. Podle EK, která mimo jiné plní funkci antimonopolního orgánu EU, se Google dopustil protisoutěžních praktik ve svém reklamním byznysu. Google v reakci uvedl, že rozhodnutí považuje za chybné a hodlá se proti němu odvolat. EK ve věci rozhodovala na základě stížnosti Evropské rady vydavatelů. Podle

    … více »
    Ladislav Hagara | Komentářů: 43
    5.9. 23:11 | Komunita

    Podpora 32bitového Firefoxu pro Linux skončí v roce 2026. Poslední podporované 32bitové verze budou Firefox 144 a Firefox 140 s rozšířenou podporou, jehož podpora skončí v září 2026.

    Ladislav Hagara | Komentářů: 3
    5.9. 19:33 | IT novinky

    Společnost Raspberry Pi nově nabízí Raspberry Pi SSD s kapacitou 1 TB za 70 dolarů.

    Ladislav Hagara | Komentářů: 12
    5.9. 15:55 | Zajímavý software

    Microsoft BASIC pro mikroprocesor 6502 byl uvolněn jako open source. Zdrojový kód je k dispozici na GitHubu.

    Ladislav Hagara | Komentářů: 14
    Pro otevření více webových stránek ve webovém prohlížečí používám
     (83%)
     (7%)
     (2%)
     (3%)
     (3%)
     (2%)
    Celkem 156 hlasů
     Komentářů: 11, poslední 4.9. 16:12
    Rozcestník

    Dotaz: PHP funkce - Jak dostat proměnnou mimo funkci

    14.2.2012 14:09 Marek
    PHP funkce - Jak dostat proměnnou mimo funkci
    Přečteno: 1025×
    Ahoj, chtěl bych se zeptat, jak bych mohl dostat z funkce proměnnou $moje_prom která je vnořená uvnitř. Abych ji mohl otestovat mimo fukci jestli existuje. Funkci volat znova nechci :-( Zkoušel jsem i global $moje_prom; ale mimo ji nevidím a var_dup() vrací NULL;
    Příklad:
    function test(){
     if($foo){
      # kod
       if($foo){
        # kod
         }else{
         $moje_prom = true;
          }
     }else{
      # kod
     }
    }
    Děkuji za pomoc

    Odpovědi

    14.2.2012 15:05 Kit
    Rozbalit Rozbalit vše Re: PHP funkce - Jak dostat proměnnou mimo funkci
    global $moje_prom při správném použití normálně funguje, ale stejně je tento přístup nějaký divný. Normálně totiž nikdo obsah proměnné z nějaké funkce nepotřebuje.

    Použij raději objekty, tam to jde poměrně jednoduše a elegantně, pokud tu proměnnou označíš jako public.
    14.2.2012 16:30 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: PHP funkce - Jak dostat proměnnou mimo funkci
    global $moje_prom funguje obráceně, než je asi myšleno :-)

    Příklad:
    $moje_prom = false;
    function test(){
     global $moje_prom;
     if(true){
       if(false){
         }else{
            $moje_prom = true; //toto není lokální proměnná, ale zpřístupněná globální 
          }
     }else{
     }
    }
    //tady $moje_prom dostupná, bo je definována ve vnějším contextu, a fce test() s ní jen manipuluje
    var_dump($moje_prom); 
    test();
    var_dump($moje_prom); 
    
    Ale jinak ano s global bych šetřil, až bych na to zapomněl :-).
    Proceduální styl umožňuje předat parametr odkazem (chcete-li referenci…)
    $moje_prom = false;
    function test(&$moje_prom){
     if(true){
       if(false){
         }else{
            $moje_prom = true; 
          }
     }else{
     }
    }
    var_dump($moje_prom); 
    test($moje_prom);
    var_dump($moje_prom); 
    
    …ale objektový model by mi byl bližší…
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    14.2.2012 16:44 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: PHP funkce - Jak dostat proměnnou mimo funkci
    $moje_prom je definována v bloku else a mimo funkci, nebo ani ve vlastní fci, pokud se tento blok else neprovede, neexistuje. (nebo přesněji, není dostupná a nemusí ani existovat…).
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    Tarmaq avatar 15.2.2012 12:53 Tarmaq | skóre: 39
    Rozbalit Rozbalit vše Re: PHP funkce - Jak dostat proměnnou mimo funkci
    globalnim promennym bych se spise vyhnul.. je to peklo a tezky se v tom pak orientovat.

    Ja bych to vracel, pokud potebujes vracet neco jineho, je jeste moznost predat te funkci promennou jako referenci. Tedy:
    function test(&$moje_prom) {
      ...
      $moje_prom = true;
      ...
      return 'blabla';
    }
    $moje_prom = false;
    test($moje_prom);
    
    Don't panic!
    15.2.2012 17:49 Kit
    Rozbalit Rozbalit vše Re: PHP funkce - Jak dostat proměnnou mimo funkci
    Referencím bych se také vyhnul, je to podobné peklo jako globální proměnné. Uvedený příklad spíš vybízí k použití proměnné jako parametru příkazu return.

    Kdybychom věděli, k čemu to tazatel potřebuje, tak bychom možná našli elegantní řešení. Třeba by to vyřešila výjimka.
    15.2.2012 18:04 l4m4
    Rozbalit Rozbalit vše Re: PHP funkce - Jak dostat proměnnou mimo funkci
    Reference nejsou podobné peklo jako globální proměnné.

    Globální proměnné jsou -- u větších programů -- problém, protože vytvářejí nelokální vazby mezi částmi kódu, a tedy zvyšují komplexitu. (U krátkých programů do stránky či dvou kódu mohou naopak kód zpřehlednit.)

    Reference per se žádný problém nejsou, v řadě jazyků se předává referencemi všechno a funguje to pěkně. Jediný problém s referencemi je syntaxe některých zvrhlých jazyků, u kterých nelze z volání funkce poznat, zda se předává referencí nebo hodnotou.
    15.2.2012 19:00 Kit
    Rozbalit Rozbalit vše Re: PHP funkce - Jak dostat proměnnou mimo funkci
    Snažím se psát funkce tak, aby výsledek funkce byl funkcí parametrů bez postranních efektů. Modifikace proměnných předaných referencí mi do tohoto paradigmatu nezapadá.

    Je mi jasné, že v OOP se to dá dodržet jen stěží. Všeho s mírou, pravda bude někde mezi.
    Tarmaq avatar 15.2.2012 19:32 Tarmaq | skóre: 39
    Rozbalit Rozbalit vše Re: PHP funkce - Jak dostat proměnnou mimo funkci
    Ja se vyhybam jak globalnim promennym tak taky predavani promennych referenci ze stejnych duvodu jak ty. Protoze toho ale tazatel moc nenapsal a z promenne $moje_prom je tezke soudit o co jde, poradil jsem alespon toto. Prijde mi to jako mensi zlo..
    Don't panic!
    15.2.2012 23:08 l4m4
    Rozbalit Rozbalit vše Re: PHP funkce - Jak dostat proměnnou mimo funkci
    Ja se vyhybam jak globalnim promennym tak taky predavani promennych referenci ze stejnych duvodu jak ty.
    Představ si, že máš gigabajtová data a potřebuješ v nich něco změnit. Opravdu je chceš předávat hodnotou?
    15.2.2012 23:12 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: PHP funkce - Jak dostat proměnnou mimo funkci
    Přesně, i když v PHP se nejedná většinou o tak velká data, ale na druhou stranou se často pracuje s dost omezenými zdroji…
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    15.2.2012 23:24 Kit
    Rozbalit Rozbalit vše Re: PHP funkce - Jak dostat proměnnou mimo funkci
    Pod pojmem "vyhýbám" si představuji "použiji jen tam, kde je to skutečně nezbytné". Proměnnou typu boolean do toho nepočítám, ta se dá skoro vždy předat hodnotou.

    Marek je evidentně začátečník, který se učí teprve základy. Tomu bych existenci globálních proměnných a předávání proměnných referencí zatajil tak dlouho, jak by to jen bylo možné. Ať se nejprve naučí programovat, na takové vychytávky má času dost.
    Josef Kufner avatar 20.2.2012 11:29 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: PHP funkce - Jak dostat proměnnou mimo funkci
    Docela rozumná možnost je obalit si test do třídy a přistupovat si pak k vlastnostem objektu. Výhodou je zapouzdření a přehlednost, i když to je maličko ukecanější.
    class Test {
      var $moje_prom = false;
      function doTest()
      {
        if (foo()) {
          $this->moje_prom = true;
        }
      }
    }
    
    $t = new Test;
    $t->doTest();
    if ($t->moje_prom) {
      // ...
    }
    
    A pokud ukecanost vadí, lze si pro pohodlnější používání vyrobit magickou satickou metodu, která vyrobí objekt s výsledky testu:
    class Test {
      // ...
      static function __callStatic()
      {
        $t = new self();
        $t->doTest();
        return $t;
      }
    }
    
    $t = Test();
    if ($t->moje_prom) {
      // ...
    }
    
    Hello world ! Segmentation fault (core dumped)

    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.