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 23:33 | Zajímavý software

Byl vydán ShellCheck ve verzi 0.4.6. Jedná se o nástroj pro statickou analýzu shellových skriptů. Shellové skripty lze analyzovat na webové stránce ShellChecku, v terminálu nebo přímo z textových editorů. Příklady kódů, na které analýza upozorňuje a doporučuje je přepsat. ShellCheck je naprogramován v programovacím jazyce Haskell. Zdrojové kódy jsou k dispozici na GitHubu pod licencí GPLv3.

Ladislav Hagara | Komentářů: 0
včera 23:33 | Pozvánky

Czech JBoss User Group zve na setkání JBUG v Brně, které se koná ve středu 5. dubna 2017 v prostorách Fakulty informatiky Masarykovy univerzity v místnosti A318 od 18:00. Přednáší Pavol Loffay na téma Distributed Tracing and OpenTracing in Microservice Architecture.

… více »
mjedlick | Komentářů: 0
včera 11:33 | Zajímavý článek

Národní centrum kybernetické bezpečnosti (NCKB) vypracovalo (pdf) 26 podrobných bezpečnostních doporučení pro síťové správce. Tato doporučení jsou nastavena tak, aby je bylo možné aplikovat v každé instituci. Jsou rozdělena na tři základní části: bezpečnost infrastruktury, bezpečnost stanic a serverů a bezpečnost uživatelů.

Ladislav Hagara | Komentářů: 9
včera 05:55 | Komunita

Prezident Nadace pro svobodný software (FSF) Richard M. Stallman vyhlásil na slavnostním ceremoniálu v rámci konference LibrePlanet 2017 vítěze Free Software Awards za rok 2016. Ocenění za společenský přínos získal SecureDrop (Wikipedie). Za rozvoj svobodného softwaru byl oceněn Alexandre Oliva (Wikipedie).

Ladislav Hagara | Komentářů: 0
včera 04:44 | Nová verze

Byla vydána verze 0.7.0 debugovacího nástroje cgdb. Mezi novinky patří například zvýrazňování syntaxe jazyka Rust. Podrobnosti v poznámkách o vydání.

Neel | Komentářů: 0
25.3. 22:00 | Komunita

Portál Stack Overflow po roce opět vyzpovídal své uživatele, jedná se především o vývojáře softwaru, a zveřejnil (podcast) detailní výsledky průzkumu. Průzkumu se letos zúčastnilo více než 64 tisíc vývojářů. Jejich nejmilovanější platformou je linuxový desktop. Ten je také druhou nejpoužívanější platformou vývojářů.

Ladislav Hagara | Komentářů: 7
24.3. 11:55 | Komunita

Vývojový tým OpenSSL ve spolupráci s iniciativou Core Infrastructure konsorcia Linux Foundation spustil proces přelicencování této kryptografické knihovny ze současné licence na licenci Apache Licence v 2.0 (ASLv2). Nová licence usnadní začleňování OpenSSL do dalších svobodných a open source projektů. Všichni dosavadní vývojáři OpenSSL (Authors) obdrží v následujících dnech email s prosbou o souhlas se změnou licence.

Ladislav Hagara | Komentářů: 32
24.3. 01:11 | Komunita

Před třemi týdny Mozilla.cz představila projekt Photon, jehož cílem je návrh a implementace nového vzhledu Firefoxu. Včera zveřejnila první náhled vzhledu Photon. Práce na projektu Photon jsou rozděleny do pěti týmů, které celkem čítají 19 lidí. Zaměřují se na zlepšení prvního spuštění Firefoxu a zaujetí nových uživatelů, celkovou úpravu vzhledu, zlepšení animací, zrychlení odezvy uživatelského rozhraní a také upravení nabídek. Vývoj lze sledovat v Bugzille.

Ladislav Hagara | Komentářů: 50
23.3. 20:00 | Komunita

OneDrive pro firmy je již ve webových prohlížečích na Linuxu stejně rychlý jako na Windows. Microsoft opravil chybu z listopadu loňského roku. OneDrive pro firmy běžel na Linuxu mnohem pomaleji než na Windows. V popisu chyby bylo uvedeno, že stačilo v prohlížeči na Linuxu nastavit v user-agentu Windows a vše se zrychlilo. Odpovědí Microsoftu bylo (Internet Archive: Wayback Machine), že Linux není podporován. Po bouřlivých diskusích na redditu i Hacker News byla chyba nalezena a opravena.

Ladislav Hagara | Komentářů: 9
23.3. 19:00 | Zajímavý projekt

Byla vyhlášena soutěž Hackaday Prize 2017. Soutěž je určena vývojářům open source hardwaru. Pro výherce je připraveno celkově 250 tisíc dolarů. Každý ze 120 finalistů získá tisíc dolarů. Nejlepší pak navíc 50, 30, 20, 15, 10 a 5 tisíc dolarů. Jedná se již o čtvrtý ročník soutěže. V roce 2014 zvítězil projekt globální sítě open source pozemních satelitních stanic SatNOGS. V roce 2015 zvítězil open source systém pro řízení elektrických invalidních vozíků pohybem očí Eyedriveomatic. V roce 2016 zvítězil modulární robot Dtto.

Ladislav Hagara | Komentářů: 0
Jak se stavíte k trendu ztenčování přenosných zařízení (smartphony, notebooky)?
 (14%)
 (2%)
 (71%)
 (3%)
 (10%)
Celkem 947 hlasů
 Komentářů: 72, poslední 1.3. 11:16
    Rozcestník

    Dotaz: Návrh třídy v PHP

    29.10.2013 13:34 Greener
    Návrh třídy v PHP
    Přečteno: 420×
    Zdravím, mám třídu, která po zavolání zpracuje v konstruktoru všechny metody a poslední metoda __toString() mi returnem vrátí celý výsledek a echo vypíše vytvořenou instanci této třídy. Všechno funguje super, ale dal jsem se na rozšíření chyb během zpracování celé třídy. Mimo jiné je tam i metoda chyba(), která se volá v případě nějaké chyby, no problém je v tom, že pokud je tato metoda zavolána, zpracují se potřebná data ale už nevím, jak bych mohl přinutit __toString() k okamžité akci, bez toho až na ni dojde řada, chci totiž v případě chyby přeskočit nejen veškeré následující metody uvnitř konstruktoru, ale chci taky ukončit ihned po zavolání průběh aktuálně zpracované metody. Neporadí nějaký profík? Děkuji

    Odpovědi

    29.10.2013 13:51 Kit
    Rozbalit Rozbalit vše Re: Návrh třídy v PHP
    throw new Exception('Chybové hlášení');
    29.10.2013 14:01 Greener
    Rozbalit Rozbalit vše Re: Návrh třídy v PHP
    Díky. Exception používám, ale to neřeší můj dotaz.
    29.10.2013 14:09 Kit
    Rozbalit Rozbalit vše Re: Návrh třídy v PHP
    Řeší, jen to možná neumíš použít.
    29.10.2013 14:17 Greener
    Rozbalit Rozbalit vše Re: Návrh třídy v PHP
    Potřebuji při chybě zpracovat spoustu věcí, navíc nechci zobrazit na bílé stránce chybovou zprávu, chci zprávu zobrazit v nějaké html šabloně, což v tomto případě není jednoduše možné.
    29.10.2013 14:20 Kit
    Rozbalit Rozbalit vše Re: Návrh třídy v PHP
    Ale je to možné. Jenom zatím nevíš, jak pohodlně se to dá pomocí výjimek udělat.
    29.10.2013 14:40 Greener
    Rozbalit Rozbalit vše Re: Návrh třídy v PHP
    Tak to je super, ale ano, opravdu vůbec netuším jak na to:-(
    29.10.2013 14:18 Kit
    Rozbalit Rozbalit vše Re: Návrh třídy v PHP
    Z dotazu to není patrné: Chceš aby vznikl konstruovaný objekt, u kterého vznikla v nějaké metodě chyba, s nějakými náhradními nebo prázdnými hodnotami? Nebo aby ten objekt vůbec nevznikl?
    29.10.2013 14:43 Greener
    Rozbalit Rozbalit vše Re: Návrh třídy v PHP
    Pokud vznikne v nějaké metodě chyba, tak chci tu metodu ihned ukončit a spustit metodu set_layout() která upraví výstupní data a následně spustit metodu __toString(), to mi ke spokojenosti zcela stačí ;-)
    29.10.2013 15:06 Kit
    Rozbalit Rozbalit vše Re: Návrh třídy v PHP
    Promiň, to mi hlava nějak nebere. Nějaký příklad by nebyl? Blok try...catch nemusí být ve stejné metodě jako throw. Ve větvi catch si můžeš upravovat data co hrdlo ráčí.
    29.10.2013 17:18 Greener
    Rozbalit Rozbalit vše Re: Návrh třídy v PHP
    Jasně, tady je... Děkuji
    class Forms{
         private $input    = array();
         private $textarea = array();
         private $layout;
         public function __construct(){
              try{
                   $this->getInput();
                   $this->getTextarea();
                   $this->getButton();
                   $this->setLayout();
              }catch (PDOException $e){
                   $this->setLayout();
              }
         }
         private function getInput(){
              if($a === true) //Vyvoláme chybu
              throw new Exception('Chyba!');
         }
         private function getTextarea(){}
         private function getButton(){}
         private function setLayout(){
              $this->layout = $input[0].
                              $input[1].
                              $input[2].
                              $textarea[0].
                              $textarea[1];
         }
         public function __toString(){
              return $this->layout();
         }
    }
    
    $forms = new Forms();
    echo $forms;
    
    Tarmaq avatar 29.10.2013 17:28 Tarmaq | skóre: 39
    Rozbalit Rozbalit vše Re: Návrh třídy v PHP
    je tam dost chyb, ktere pravdepodobne vznikly orezanim ukazky - neslo by sem vlozit celou tridu bez orezavani? Neni mi z prikladu jasne co se ma dosadit do promenne $this->layout pokud nektera z metod vyhodi vyjimku..
    Don't panic!
    29.10.2013 17:50 Kit
    Rozbalit Rozbalit vše Re: Návrh třídy v PHP
    Napadá mě, že $input, $textarea a případně i $button mají být vnořené objekty. V tom případě by to vypadalo mnohem lépe.
    29.10.2013 18:27 Greener
    Rozbalit Rozbalit vše Re: Návrh třídy v PHP
    Nevím co myslíš tím "vnořené objekty". O tom jsem nikdy nečetl ani neslyšel :-(
    29.10.2013 18:38 Kit
    Rozbalit Rozbalit vše Re: Návrh třídy v PHP
    Uvnitř třídy máš příkazy
    private $input = array();
    private $textarea = array();
    // v konstruktoru
    $this->getInput();
    Zřejmě metodou getInput() plníš pole $input. Jenže to tak být nemusí. Co třeba takto?
    private $input;
    private $textarea;
    // v konstruktoru
    $input = new Input();
    
    a v metodě __toString() ty dva objekty spojíš do jednoho stringu.
    29.10.2013 18:02 Kit
    Rozbalit Rozbalit vše Re: Návrh třídy v PHP
    Podle mne by proměnná $this->layout vůbec neměla existovat. Přece se i v OOP dělá normalizace. Nebo snad ne?
    29.10.2013 18:25 Greener
    Rozbalit Rozbalit vše Re: Návrh třídy v PHP
    Souhlas, ale nedokázal jsem přimět metodu __toString() při chybě pracovat.
    Tarmaq avatar 29.10.2013 18:30 Tarmaq | skóre: 39
    Rozbalit Rozbalit vše Re: Návrh třídy v PHP
    jasne, ja se proste jen snazil dopidit co ma vlastne ta instance vypsat pri konverzi na string pokud v nejake z tech metod dojde k chybe, jeho pofiderni implementaci jsem neresil..
    Don't panic!
    29.10.2013 18:23 Greener
    Rozbalit Rozbalit vše Re: Návrh třídy v PHP
    Jaké chyby myslíš? Do $this->layout jsem chtěl dosadit standardní input, textbox atd..
    Tarmaq avatar 29.10.2013 18:27 Tarmaq | skóre: 39
    Rozbalit Rozbalit vše Re: Návrh třídy v PHP
    napr.:
    1. v metode __toString() se vola neexistujici metoda $this->layout()
    2. v metode setLayout() jsou pouzity nedefinovane lokalni promenne $input a $textarea
    3. v metode getInput() je pouzita nedefinovana lokalni promenna $a
    Don't panic!
    29.10.2013 18:33 Greener
    Rozbalit Rozbalit vše Re: Návrh třídy v PHP
    1. ano, závorky tam nepatří, čili to má  být takto $this->layout;
    2. no to jsou pole, ne proměnné
    3. ano, vypadl řádek $a = true;
    29.10.2013 18:42 Kit
    Rozbalit Rozbalit vše Re: Návrh třídy v PHP
    2. Pole je také proměnná, ale když to chceš přesně, tak:

    "v metode setLayout() jsou pouzita nedefinovaná lokalni pole $input a $textarea"

    Je to tak lepší?
    29.10.2013 18:57 Greener
    Rozbalit Rozbalit vše Re: Návrh třídy v PHP
    Je, už to vidím...
    29.10.2013 17:40 Kit
    Rozbalit Rozbalit vše Re: Návrh třídy v PHP
    Do té větve catch jsem dal výmaz naplněných dat, ale nemusí tam být, pokud mají zůstat. Zrušil jsem metodu setLayout(), protože do atributů objektu se dávají jen atomické a strukturované údaje, nikoli agregáty.
    class Forms {
        private $input    = array();
        private $textarea = array();
    
        public function __construct(){
            try {
                $this->getInput();
                $this->getTextarea();
                $this->getButton();
            } catch (PDOException $e){
                $input    = array();
                $textarea = array();
            }
        }   
    
        private function getInput() {
            if($a === true) //Vyvoláme chybu
                throw new Exception('Chyba!');
        }       
        
        private function getTextarea() {}
        
        private function getButton() {}
        
        public function __toString(){
            return implode('', $this->input) .
                implode('', $this->textarea);
        }
    }
    
    $forms = new Forms();
    echo $forms;
    
    29.10.2013 18:22 Greener
    Rozbalit Rozbalit vše Re: Návrh třídy v PHP
    Pokud zakomentuji ve tvém příkladu řádek:
    //if($a === true) //Vyvoláme chybu
    abych vyvolal chybu kterou odchytím a pokračuji dál dle nastaveni, tak dostávam chybu:
    Fatal error:  Uncaught exception 'Exception' with message 'Chyba!'
    Proč? Díky
    29.10.2013 18:27 Kit
    Rozbalit Rozbalit vše Re: Návrh třídy v PHP
    Toho jsem si všiml až dodatečně. Jen jsem upravoval tvůj program, ve kterém vyvoláváš Exception, ale zachytáváš PDOException. Pokud tu předponu "PDO" vyhodíš, bude to fungovat.
    29.10.2013 18:38 Greener
    Rozbalit Rozbalit vše Re: Návrh třídy v PHP
    A odkud ji mám vyhodit? Nikde PDO nezachytávám :-( hm, hm..
    29.10.2013 18:46 Kit
    Rozbalit Rozbalit vše Re: Návrh třídy v PHP
    Děláš si srandu? Místo
    } catch (PDOException $e){
    napiš jen
    } catch (Exception $e){
    Takovou kravinu sis mohl klidně opravit sám. Měl jsi to tak chybně v originále a pouze jsem to přehlédl.
    29.10.2013 18:53 Greener
    Rozbalit Rozbalit vše Re: Návrh třídy v PHP
    Ne, fakt jsem to neviděl!!!
    Tarmaq avatar 29.10.2013 18:48 Tarmaq | skóre: 39
    Rozbalit Rozbalit vše Re: Návrh třídy v PHP
    vzdyt to mas v konstruktoru:
        public function __construct(){
              try{
                   $this->getInput();
                   $this->getTextarea();
                   $this->getButton();
                   $this->setLayout();
              }catch (PDOException $e){
                   $this->setLayout();
              }
         }
    
    myslel tim, ze misto zachytavani PDOException tam mas mit obecnou Exception, takze tim zachytis jakoukoliv vyjimku, ne jen vyjimky ktere jsou instancemi PDOException
    Don't panic!
    29.10.2013 18:36 Greener
    Rozbalit Rozbalit vše Re: Návrh třídy v PHP
    protože do atributů objektu se dávají jen atomické a strukturované údaje, nikoli agregáty.
    Můžeš mi prosím tohle objasnit?
    29.10.2013 18:52 Kit
    Rozbalit Rozbalit vše Re: Návrh třídy v PHP
    Konstruktor objektu analyzuje vstupní data a nastaví podle nich atributy objektu. Metoda __toString() má za úkol z těchto dat vytvořit nějaký řetězec reprezentující objekt. Funguje tedy podobně jako obecná funkce reduce(). Neber metodě __toString() její práci. Ušetříš paměť i čas procesoru.
    29.10.2013 19:04 Greener
    Rozbalit Rozbalit vše Re: Návrh třídy v PHP
    Tak že
    try {
    ..
    } catch (Exception $e){
    ..
    }
    a volání metod patří do __toString() ?
    29.10.2013 19:11 Kit
    Rozbalit Rozbalit vše Re: Návrh třídy v PHP
    Možná. Záleží na tom, co ty metody dělají. pokud analýzu vstupu, tak do konstruktoru. Pokud syntézu výstupu, tak do metody __toString(). Pokud mají jen modifikovat/číst vnitřní stav objektu, tak se volají extra.
    29.10.2013 19:23 Greener
    Rozbalit Rozbalit vše Re: Návrh třídy v PHP
    Když to shrnu, tak jsem rád, že jsem se zeptal, jelikož je to jednodušší řešení než jsem požadoval. Tak že velké dík!

    Nevím, jestli mám založit nové vlákno nebo se může ještě zeptat zde. Když tak ať to admin opraví. Děkuji Stálo by za zmíňku, jak mám odchytit ostatní chyby? Pokud existuje takové jednoduché řešení jako je tohle, tak určitě existuje jednoduché řešení i pro takový základ jako je zpracvání všech chyb.
    try {
     echo $a; // tohle by mělo vyhodit chybu, že není inicializovaná prom. $a
    } catch (Exception $e){
     echo "$e"; // a zprávu o té chybě bych chtěl dostat sem
    }
    A pak už bych byl velký frajem a změnil bych si i NICK :-D
    29.10.2013 19:32 Kit
    Rozbalit Rozbalit vše Re: Návrh třídy v PHP
    Takové chyby by za běhu neměly vznikat. Zkus si funkci isset($a).
    29.10.2013 19:39 Greener
    Rozbalit Rozbalit vše Re: Návrh třídy v PHP
    Tak to je jen příklad, nabízí se různé nezdary s include/require, práce s mysql atd.. to mám úplně všechno ošetřit sólo? To se z toho ale poseju. Klasika, potřebný kód 10 řádků, ošetření chyb + 200 řádků navíc :-(
    29.10.2013 19:45 Kit
    Rozbalit Rozbalit vše Re: Návrh třídy v PHP
    A proč? include mám v každém projektu jen 1×, víc jich není potřeba. Ošetření také. Kde máš těch +200 řádek navíc? Možná 20. I kdyby to bylo 200 řádek, tak se to v celém projektu ztratí.
    Josef Kufner avatar 29.10.2013 22:19 Josef Kufner | skóre: 67
    Rozbalit Rozbalit vše Re: Návrh třídy v PHP
    Chyby v kódu tam mít nemáš. Chyby, se kterými se počítá, vyhodí výjimku.

    Pokud něco v kódu přecejen poděláš, použij set_error_handler. V takových případech ale má stránka chcípnout s HTTP kódem 500 nebo vyšším. Pro vývoj existují také různé ladicí nástroje, které umí ukázat podrobnosti, aby se chyby lépe lovily.

    Doporučuju také přečíst phptherightway.com.
    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.