Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: phpman 19. 01. 2018, 13:22:10

Název: Jak vytvořit v PHP virtuální třídu?
Přispěvatel: phpman 19. 01. 2018, 13:22:10
Ahoj, poradí někdo, jak v php vytvořit "virtuální" class? Nemůžu nic najít. Díky
Název: Re:Jak vytvořit v PHP virtuální třídu?
Přispěvatel: Mufasa 19. 01. 2018, 13:46:13
Definujte virtualnu.
Název: Re:Jak vytvořit v PHP virtuální třídu?
Přispěvatel: phpman 19. 01. 2018, 13:57:19
Po startu potřebuji vytvořit nějakou statickou třídu, ve které bych vytvořil nějaké const které by byly dostupné v celé aplikaci. Proč ji chci vygenerovat a ne ji napsat přímo do kódu? Statická třída se vždy zavolá celá a obsah těch const je celkem časově náročné vytvořit, no a když tu class zavolám 10x tak by se to vždy generovalo znova.
Název: Re:Jak vytvořit v PHP virtuální třídu?
Přispěvatel: phpman 19. 01. 2018, 13:59:51
Potřebuji vygenerovat tedy něco takového....

Kód: [Vybrat]
class Foo {
    const BAR = 42;
}
Název: Re:Jak vytvořit v PHP virtuální třídu?
Přispěvatel: Kit 19. 01. 2018, 14:01:33
To je přece obyčejná třída. Na tohle žádnou virtuální nepotřebuješ.
Název: Re:Jak vytvořit v PHP virtuální třídu?
Přispěvatel: phpman 19. 01. 2018, 14:07:20
Napsal jsem to vážně k nepochopení, nebo jsi četl jen nadpis?
Název: Re:Jak vytvořit v PHP virtuální třídu?
Přispěvatel: . 19. 01. 2018, 14:45:25
Napsal jsi to jako debil a zase vymýšlíš kraviny. Jako vždycky.
Název: Re:Jak vytvořit v PHP virtuální třídu?
Přispěvatel: Sten 19. 01. 2018, 15:12:01
Třída se statickými členy (všichni členové se inicializují při prvním přístupu ke třídě):

Kód: [Vybrat]
class Foo {
    public static const BAR = 42;
}

Třída s línou inicializací (každý člen se inicializuje až při prvním přístupu):

Kód: [Vybrat]
class Foo {
    private static $bar = NULL;

    public static getBar() {
        if ($bar == NULL)
            $bar = 42;
        return $bar;
    }
}
Název: Re:Jak vytvořit v PHP virtuální třídu?
Přispěvatel: 3ugeene 19. 01. 2018, 15:16:38
eval?
Název: Re:Jak vytvořit v PHP virtuální třídu?
Přispěvatel: phpman 19. 01. 2018, 15:20:45
To je nesmyls, $bar = NULL; bude při každém zavolání třídy.
Název: Re:Jak vytvořit v PHP virtuální třídu?
Přispěvatel: Trupik 19. 01. 2018, 15:22:48
To je nesmyls, $bar = NULL; bude při každém zavolání třídy.
Čo Vy si, Kefalín, predstavujete pod takým pojmom: "zavolání třídy" ?  ;D
Název: Re:Jak vytvořit v PHP virtuální třídu?
Přispěvatel: phpman 19. 01. 2018, 15:25:11
Foo::$bar;
Název: Re:Jak vytvořit v PHP virtuální třídu?
Přispěvatel: phpman 19. 01. 2018, 15:26:16
EDIT
Foo::getBar() ;
Název: Re:Jak vytvořit v PHP virtuální třídu?
Přispěvatel: 3ugeene 19. 01. 2018, 15:35:12
lol
Název: Re:Jak vytvořit v PHP virtuální třídu?
Přispěvatel: Mufasa 19. 01. 2018, 15:38:24
Tak preco si na zaciatku skriptu nevytorite "singleton" tej triedy?

$foo = new Foo;

a potom uz dalej pristupujete k $foo?
Název: Re:Jak vytvořit v PHP virtuální třídu?
Přispěvatel: Kit 19. 01. 2018, 15:41:50
Tak preco si na zaciatku skriptu nevytorite "singleton" tej triedy?

K čemu singleton? Vždyť ten objekt vytvoří jen jednou a bude si ho předávat přes parametry.
Název: Re:Jak vytvořit v PHP virtuální třídu?
Přispěvatel: phpman 19. 01. 2018, 15:45:38
Jasně, budu zbytečně vláčet objekt který potřebuji v 99% všech tříd..
Název: Re:Jak vytvořit v PHP virtuální třídu?
Přispěvatel: Kit 19. 01. 2018, 15:57:21
Jasně, budu zbytečně vláčet objekt který potřebuji v 99% všech tříd..

Přesně tak se to má dělat.
Název: Re:Jak vytvořit v PHP virtuální třídu?
Přispěvatel: Sten 19. 01. 2018, 16:00:37
Čuchám, čuchám trolla.

https://ideone.com/o7RNJs
Název: Re:Jak vytvořit v PHP virtuální třídu?
Přispěvatel: Kit 19. 01. 2018, 16:23:59
...

Tyhle nechutnosti z Javy bych do PHP fakt netahal.
Název: Re:Jak vytvořit v PHP virtuální třídu?
Přispěvatel: Ondrej Nemecek 19. 01. 2018, 19:56:54
Dotaz mi připadá trochu zmatený, nicméně je asi sháňka po statické metodě, která by automaticky inicializovala statické třídní proměnné. V javě na to je static blok, v php to asi nejde. Udělat bych si místo toho singletona (https://stackoverflow.com/a/3312860) anebo si ve vlastním autoloaderu po nahrání třídy zavolat tu inicializaci:

Kód: (php) [Vybrat]
<?php
// index.php:

spl_autoload_register(function($class) {
    include 
$class '.php';
    
$class::__static();
});

print(
Constants::CONST_A);
print(
Constants::$constB);
print(
"\n");

?>

<?php

// Constants.php:

class Constants {

    const 
CONST_A 'A';
    public static 
$constB;

    public static function 
__static(){
        
self::$constB 'B';
    }

}

?>

Název: Re:Jak vytvořit v PHP virtuální třídu?
Přispěvatel: Ondrej Nemecek 19. 01. 2018, 19:58:37
Dotaz mi připadá trochu zmatený, nicméně (...)

Anebo bych si udělal instanci a tu všude vláčel, jak říká Kit.
Název: Re:Jak vytvořit v PHP virtuální třídu?
Přispěvatel: phpman 19. 01. 2018, 22:27:04
Dotaz mi připadá trochu zmatený, nicméně je asi sháňka po statické metodě, která by automaticky inicializovala statické třídní proměnné. V javě na to je static blok, v php to asi nejde.
Tak jsem to vyřešil obyčejnou funkcí, dostupná je všude a ještě to bude kratší pro zápis.