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í
×
eParkomat, startup z ČR, postoupil mezi finalisty evropského akcelerátoru ChallengeUp!
Robot na pivo mu otevřel dveře k opravdovému byznysu
Internet věcí: Propojený svět? Už se to blíží...
dnes 15:30 | Zajímavý projekt

Společnost Jolla oznámila v příspěvku Case study: Sailfish Watch na svém blogu, že naportovala Sailfish OS na chytré hodinky. Využila a inspirovala se otevřeným operačním systémem pro chytré hodinky AsteroidOS. Použita je knihovna libhybris. Ukázka ovládání hodinek na YouTube.

Ladislav Hagara | Komentářů: 1
dnes 14:15 | Nová verze

Byla vydána verze 7.1.0 skriptovacího jazyka PHP používaného zejména k vývoji dynamických webových stránek. Jedná se o první stabilní verzi nejnovější větvě 7.1. Přehled novinek v dokumentaci. Podrobnosti v ChangeLogu. K dispozici je také příručka pro přechod z PHP 7.0.x na PHP 7.1.x.

Ladislav Hagara | Komentářů: 0
dnes 12:55 | Nová verze

Google Chrome 55 byl prohlášen za stabilní. Nejnovější stabilní verze 55.0.2883.75 tohoto webového prohlížeče přináší řadu oprav a vylepšení (YouTube). Opraveno bylo také 36 bezpečnostních chyb. Mariusz Mlynski si například vydělal 22 500 dolarů za 3 nahlášené chyby (Universal XSS in Blink).

Ladislav Hagara | Komentářů: 1
dnes 11:55 | Pozvánky

Máte rádi svobodný software a hardware nebo se o nich chcete něco dozvědět? Přijďte na 135. sraz spolku OpenAlt, který se bude konat ve čtvrtek 8. prosince od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Sraz bude tentokrát tématický. Bude retro! K vidění budou přístroje jako Psion 5mx nebo Palm Z22. Ze svobodného hardwaru pak Openmoko nebo čtečka WikiReader. Přijďte se i vy pochlubit svými legendami, nebo alespoň na pivo. Moderní hardware má vstup samozřejmě také povolen.

xkucf03 | Komentářů: 0
dnes 00:10 | Nová verze

Byla vydána verze 3.2 svobodného systému pro detekci a prevenci průniků a monitorování bezpečnosti počítačových sítí Suricata. Z novinek lze zmínit například podporu protokolů DNP3 a CIP/ENIP, vylepšenou podporu TLS a samozřejmě také aktualizovanou dokumentaci.

Ladislav Hagara | Komentářů: 0
včera 21:00 | Nová verze

Byla vydána beta verze Linux Mintu 18.1 s kódovým jménem Serena. Na blogu Linux Mintu jsou hned dvě oznámení. První o vydání Linux Mintu s prostředím MATE a druhé o vydání Linux Mintu s prostředím Cinnamon. Stejným způsobem jsou rozděleny také poznámky k vydání (MATE, Cinnamon) a přehled novinek s náhledy (MATE, Cinnamon). Linux Mint 18.1 bude podporován až do roku 2021.

Ladislav Hagara | Komentářů: 0
včera 16:42 | Nová verze

Byl vydán Devuan Jessie 1.0 Beta 2. Jedná se o druhou beta verzi forku Debianu bez systemd představeného v listopadu 2014 (zprávička). První beta verze byla vydána v dubnu letošního roku (zprávička). Jedna z posledních přednášek věnovaných Devuanu proběhla v listopadu na konferenci FSCONS 2016 (YouTube, pdf).

Ladislav Hagara | Komentářů: 0
včera 15:16 | Komunita

Na GOG.com začal zimní výprodej. Řada zlevněných her běží oficiálně také na Linuxu. Hru Neverwinter Nights Diamond lze dva dny získat zdarma. Hra dle stránek GOG.com na Linuxu neběží. Pomocí návodu ji lze ale rozběhnout také na Linuxu [Gaming On Linux].

Ladislav Hagara | Komentářů: 1
včera 13:14 | Bezpečnostní upozornění

Byla vydána verze 2.7.1 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. Řešeno je několik bezpečnostních problémů. Aktualizován byl především Tor Browser na verzi 6.0.7. Tor Browser je postaven na Firefoxu ESR (Extended Support Release) a právě ve Firefoxu byla nalezena a opravena vážná bezpečnostní chyba MFSA 2016-92 (CVE-2016-9079, Firefox SVG Animation

… více »
Ladislav Hagara | Komentářů: 0
30.11. 19:19 | Nová verze

Příspěvek na blogu nadace Raspberry Pi je věnován bezpečnostním vylepšením v nejnovější verzi Raspbianu s desktopovým prostředím PIXEL. V oficiálních obrazech je nově zakázán SSH přístup. Ten lze samozřejmě povolit po zavedení Raspbianu pomocí nástroje raspi-config. Nemá-li uživatel k Raspberry Pi připojený terminál, může SSH přístup povolit vytvořením souboru ssh v adresáři /boot. Raspbian nově upozorňuje uživatele na bezpečnostní riziko, je-li SSH přístup povolen a uživatel pi nemá změněno výchozí heslo.

Ladislav Hagara | Komentářů: 41
Kolik máte dat ve svém domovském adresáři na svém primárním osobním počítači?
 (32%)
 (24%)
 (29%)
 (7%)
 (5%)
 (3%)
Celkem 755 hlasů
 Komentářů: 50, poslední 29.11. 15:50
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: 944×
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.