Autor | Zpráva | ||
---|---|---|---|
Monkeys Profil * |
#1 · Zasláno: 27. 4. 2015, 22:50:33
Zdravim
da sa z instancie triedy nastavit nova hodnota konstanty? napr. class a { const PATH = "../cesta/cesta/"; } $a = new a(); $a::PATH = "../nova/cesta/"; // toto nefunguje dik M. |
||
tiso Profil |
#2 · Zasláno: 27. 4. 2015, 23:11:17
nie
|
||
Keeehi Profil |
Monkeys:
Nejde o to, zda je to uvnitř nebo vně nebo úplně bez vztahu k třídě. Konstanta nejde nikdy změnit, protože vždy zůstává neměnná, konstantní. Možná by to šlo změnit vytvořením nové třídy která od a dědí. Tak to otestuj. |
||
Alphard Profil |
#4 · Zasláno: 27. 4. 2015, 23:44:45
Keeehi:
„Nejde o to, zda je to uvnitř nebo vně nebo úplně bez vztahu k třídě“ To není úplně pravda, konstanty definované pomocí define() se vytvářejí až v run-time fázi a pomocí runkit_constant_redefine() je lze změnit (ne že by byl dobrý nápad je měnit). Třídní konstanty jsou nastaveny před run-time fází a jejich změna není možná (kvůli tomu také není možné vyhodnotit do nich výrazy, jak se někdo občas snaží). Monkeys: Čeho chcete dosáhnout? Uměl bych si představit snahu nastavit něco v konstruktoru a pak dál nepovolit žádné změny, ale definovat si konstantu a chtít ji změnit jako public vlastnost (jak je naznačeno v [#1]) se mi zdá zvláštní.
|
||
Monkeys Profil * |
#5 · Zasláno: 27. 4. 2015, 23:55:13
Alphard:
Mam class na generovanie formularov a na zaciatku triedy mam zadefinovanu absolutnu cestu k obrazkom pomocou const. Napr. koli formularovemu prvku input image. Triedu Form teraz volam z inej triedy v ktorej nie je dostupna absolutna cesta a vyhadzuje mi to chybu. Tak som chcel konstantu definovat ako NULL. Trochu som nedomyslel tu strukturu. Budem to musiet prerobit na public premennu a bude to OK. |
||
Keeehi Profil |
#6 · Zasláno: 28. 4. 2015, 00:06:28
Monkeys:
„Budem to musiet prerobit na public premennu a bude to OK.“ Než public proměnnou by bylo hezčí použít private nebo protected a setter. Nebo ještě lépe jak už psal Alphard nastavení provést v konstruktoru. Alphard: To jsem nevěděl avšak pro zachování jednoduchosti bych to stejně neřekl. |
||
Alphard Profil |
#7 · Zasláno: 28. 4. 2015, 00:12:42
Kromě již řečeného, doporučuji nikde v kódu pevně nepsat cesty, vše řešit přes konfiguraci. Nutné závislosti předávat ideálně v konstruktoru, volitelné přes settery.
Protože pak se stane, že chcete část tříd použít v novém projektu, který je ale potřeba trochu přeskládat. Začnete tedy přepisovat zdrojáky, vzniknou vám dvě verze zdrojových kódů, za týden budete řešit bugfixy, přenášet je mezi verzemi a to je cesta do pekla. |
||
Časová prodleva: 10 let
|
0