Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Podmínky v PHP

Ahoj.
Chtěl bych poradit s kódém v PHP-čku. Nevím jak napsat podmínku.

// přiklady URL
$url = 'knihovna';
$url = 'knihovna/cesko';
$url = 'knihovna/cesko/klasika';
$url = 'knihovna/slovensko';
$url = 'knihovna/slovensko/klasika';

// akce na URL
if     ( $url === 'knihovna' )                   new knihovna ();
elseif ( $url === 'knihovna/cesko' )             new knihovna\cesko ();
elseif ( $url === 'knihovna/slovensko' )         new knihovna\slovensko ();
elseif ( $url === 'knihovna/cesko/klasika' )     new knihovna\cesko\klasika ();
elseif ( $url === 'knihovna/slovensko/klasika' ) new knihovna\slovensko\klasika ();

Jenže já bych potřeboval vytvořit daný objekt (vždy pouze jeden) i když za těmi adresami něco ještě bude.

// příklad
$url = 'knihovna/cokoliv-ale-ne-cesko-a-slovenso';      new knihovna ();
$url = 'knihovna/cesko/cokoliv-ale-ne-klasika'          new knihovna\cesko ();
$url = 'knihovna/cesko/klasika/cokoliv';                new knihovna\cesko\klasika ();
$url = 'knihovna/slovensko/cokoliv-ale-ne-klasika';     new knihovna\slovensko ();
$url = 'knihovna/slovensko/klasika/cokoliv';            new knihovna\slovensko\klasika ();

Napadlo mě to celý otočit abych opravdu vytvářel pouze jeden objekt a nevytvářel objektů víc ale stejně nevím jak ty podmínky napsat.

// něco jako
if     ( $url === 'knihovna/cesko/klasika' )     new knihovna\cesko\klasika ();
elseif ( $url === 'knihovna/slovensko/klasika' ) new knihovna\slovensko\klasika ();
elseif ( $url === 'knihovna/slovensko' )         new knihovna\slovensko ();
elseif ( $url === 'knihovna/cesko' )             new knihovna\cesko ();
elseif ( $url === 'knihovna' )                   new knihovna ();

Možná by to šlo uložit do pole ale zase to končí na podmínce. Můžete mi prosím poradit někdo zkušený? Děkuji

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Buď to môžeš spraviť tak, že budeš kontrolovať všetky možnosti: $parts = explode('/', $url); switch…
los 04.04.2017 19:48
los
Mrknu na tu druhou možnost, pro mě lepší.. zatím díky.. poslední
Lubos58 04.04.2017 21:53
Lubos58

Buď to môžeš spraviť tak, že budeš kontrolovať všetky možnosti:

$parts = explode('/', $url);
switch (array_shift($parts)) {
    case 'knihovna':
        switch (array_shift($parts)) {
            case 'cesko':
                switch (array_shift($parts)) {
                    case 'klasika':
                        return new knihovna\cesko\klasika;
                }
                return new knihovna\cesko;
            case 'slovensko':
                switch (array_shift($parts)) {
                    case 'klasika':
                        return new knihovna\slovensko\klasika;
                }
                return new knihovna\slovensko;
        }
        return new knihovna;
    default:
        return NULL;
}

Alebo budeš zisťovať, či požadovaná trieda existuje:

$class = str_replace('/', '\\', $url);
while (TRUE) {
    if (class_exists($class))
        return new $class;
    $i = strrpos($class, '\\');
    if ($i === FALSE)
        return NULL;
    $class = substr($class, 0, $i);
}

Zpět do poradny Odpovědět na původní otázku Nahoru