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 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ářů: 6
20.1. 15:51 | Komunita

Mozilla.cz informuje, že nástroje pro webové vývojáře se možná oddělí od Firefoxu a stanou doplňkem. Nástroje pro webové vývojáře prošly velkým přepisem a tým, který se stará o jejich vývoj, by uvítal možnost jejich častějších aktualizacích nezávisle na vydávání nových verzí Firefoxu.

Ladislav Hagara | Komentářů: 10
20.1. 07:00 | Humor

Čtenářům AbcLinuxu vše nejlepší k dnešnímu Dni zvýšení povědomí o tučňácích (Penguin Awareness Day).

Ladislav Hagara | Komentářů: 0
Jak se stavíte k trendu ztenčování přenosných zařízení (smartphony, notebooky)?
 (11%)
 (2%)
 (73%)
 (3%)
 (10%)
Celkem 372 hlasů
 Komentářů: 25, poslední 21.1. 13:34
Rozcestník
Reklama

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: 948×
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: 66
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.