Avatar
loading84
Člen
Avatar
loading84:

Zdravím sehnal jsem si php klienta na databázi redis a potřeboval bych jej pořádně prozkoumat. Jelikož nemám s objektovým programováním tolik zkušeností, tak mě dostal tenhle zápis. A v druhem obrázku mám strukturu. Nemůžu najít třídu z které tahle třída dědí.

 
Odpovědět 24.10.2015 21:53
Avatar
Odpovídá na loading84
Martin Konečný (pavelco1998):

Třída Exception je zabudována přímo v PHP.

http://php.net/…xception.php

edit:
Jen abych doplnil, proč ta PredisException od ní dědí a nemá v sobě nic navíc - snáz se pak zjistí, o jakou přesně chybu (výjimku) jde.

try {
   // nějaký kód
} catch (PredisException $e) {
   // víme, že je to výjimka kvůli chybě s knihovnou Predis (třeba se nedokáže spojit s databází apod.)
} catch (AnotherException $e) {
   // nějaká jiná výjimka,  můžeme zde provést jinou akci
}
Editováno 24.10.2015 22:27
 
Nahoru Odpovědět  +1 24.10.2015 22:25
Avatar
loading84
Člen
Avatar
loading84:

Dá se někde najít seznam zabudovaných tříd? Abych příště nekoukal jako tele..

 
Nahoru Odpovědět 25.10.2015 13:20
Avatar
loading84
Člen
Avatar
loading84:

Poslední dotaz.

Mám třídu

use Predis\Comman­d\CommandInter­face;
use Predis\Comman­d\RawCommand;
use Predis\Comman­d\ScriptComman­d;
use Predis\Configu­ration\Option­s;
use Predis\Configu­ration\Option­sInterface;
use Predis\Connec­tion\Aggregate­ConnectionInter­face;
use Predis\Connec­tion\Connecti­onInterface;
use Predis\Connec­tion\Parameter­sInterface;
use Predis\Monitor\Con­sumer as MonitorConsumer;
use Predis\Pipeli­ne\Pipeline;
use Predis\PubSub\Con­sumer as PubSubConsumer;
use Predis\Respon­se\ErrorInter­face as ErrorResponse­Interface;
use Predis\Respon­se\ResponseIn­terface;
use Predis\Respon­se\ServerExcep­tion;
use Predis\Transac­tion\MultiExec as MultiExecTran­saction;

chybi usePredis\Pro­file\ProfileIn­terface

Definice tridy

class Client implements **ClientInterface**
{
atributy

metody
}

a v interface je

use Predis\Comman­d\CommandInter­face;
use Predis\Configu­ration\Option­sInterface;
use Predis\Connec­tion\Connecti­onInterface;
use Predis\Profile\Pro­fileInterface;

interface ClientInterface
{
functions
}

Otázka zní, proč to musí být v Clientinterface, když je to ve třídě Client. Proč to musí být definovane na obou místech.
ClientInterface mi říka že musím mít všechny metody z

use Predis\Comman­d\CommandInter­face;
use Predis\Configu­ration\Option­sInterface;
use Predis\Connec­tion\Connecti­onInterface;
use Predis\Profile\Pro­fileInterface;

Tím pádem třída Predis\Client musí mít všechny metody

Clientinterface

+

use Predis\Comman­d\CommandInter­face;
use Predis\Configu­ration\Option­sInterface;
use Predis\Connec­tion\Connecti­onInterface;
use Predis\Profile\Pro­fileInterface;

Doufam, že jsem to napsal zrozumitelně. Jinými slovy proč to musí být na dvou místech. Jednak v klientu a jednak v Clientinterface. Jedna se o definovaní tři interface.

Editováno 25.10.2015 14:03
 
Nahoru Odpovědět 25.10.2015 14:03
Avatar
Odpovídá na loading84
Martin Konečný (pavelco1998):

Nejsem si jistej, jestli chápu správně dotaz. Ty use statementy se používají proto, abys pak v programu nemusel psát celý namespace, tzn. když máš

use Predis\Command\CommandInterface

tak když třeba třída to rozhraní implementuje, stačí napsat jen

class Foo implements CommandInterface   //  namísto celého Predis\Command\CommandInterface
{
}

A pokud daná třída/interfa­ce/trait není vůbec v programu použit, pak je zbytečný mít jeho název v use.

 
Nahoru Odpovědět 25.10.2015 14:21
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.