Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: 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
-
Definujte virtualnu.
-
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.
-
Potřebuji vygenerovat tedy něco takového....
class Foo {
const BAR = 42;
}
-
To je přece obyčejná třída. Na tohle žádnou virtuální nepotřebuješ.
-
Napsal jsem to vážně k nepochopení, nebo jsi četl jen nadpis?
-
Napsal jsi to jako debil a zase vymýšlíš kraviny. Jako vždycky.
-
Třída se statickými členy (všichni členové se inicializují při prvním přístupu ke třídě):
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):
class Foo {
private static $bar = NULL;
public static getBar() {
if ($bar == NULL)
$bar = 42;
return $bar;
}
}
-
eval?
-
To je nesmyls, $bar = NULL; bude při každém zavolání třídy.
-
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
-
Foo::$bar;
-
EDIT
Foo::getBar() ;
-
lol
-
Tak preco si na zaciatku skriptu nevytorite "singleton" tej triedy?
$foo = new Foo;
a potom uz dalej pristupujete k $foo?
-
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.
-
Jasně, budu zbytečně vláčet objekt který potřebuji v 99% všech tříd..
-
Jasně, budu zbytečně vláčet objekt který potřebuji v 99% všech tříd..
Přesně tak se to má dělat.
-
Čuchám, čuchám trolla.
https://ideone.com/o7RNJs
-
...
Tyhle nechutnosti z Javy bych do PHP fakt netahal.
-
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:
<?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';
}
}
?>
-
Dotaz mi připadá trochu zmatený, nicméně (...)
Anebo bych si udělal instanci a tu všude vláčel, jak říká Kit.
-
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.