Autor | Zpráva | ||
---|---|---|---|
kixs Profil * |
#1 · Zasláno: 5. 9. 2010, 22:49:34
Kvůli zjednodušení psaní dlouhých cest jsem si napsal funkci, která vezme vstupní parametr a vnoří do aplikace php soubor. Zádrhel je, že v takto vnořeném souboru nemohu přistupovat k proměnným hlavního php souboru. Php to asi interpretuje tak, že proměnné ve vnořeném souboru jsou uvnitř funkce. Otázka zní jak učinit tento kód funkčním?
hlavni.php <? function loadInc($inc) { include __DIR__. "/$inc.php"; } $prom = 'promenna'; loadInc('vnoreny'); ?> vnonery.php <? var_dump($prom); ?> |
||
Keeehi Profil |
#2 · Zasláno: 5. 9. 2010, 23:30:21 · Upravil/a: Keeehi
Měl bys vědět, jak funguje include. Představ si to asi takto: Na začátku, než se začne vůbec script provádět se celý script projde a na příslušná místa se místo include "soubor" vloží obsah souboru a potom se začne script provádět. Ve skutečnosti to tak není ale pro ilustraci to stačí takže ti z toho vznikne toto:
<?php function loadInc($inc) { var_dump($prom); } $prom = 'promenna'; loadInc('vnoreny'); ?> Řešením by bylo do souboru vnoreny.php přidat řádek, global $prom; pak vznikne tato funkce, function loadInc($inc) { global $prom; var_dump($prom); } |
||
kixs Profil * |
#3 · Zasláno: 5. 9. 2010, 23:54:58
Takže jinak řečeno je správnější používat přímo include než si to zkracovat a pak používat $_GLOBALS? :-/
|
||
Keeehi Profil |
#4 · Zasláno: 6. 9. 2010, 00:34:35
ano
|
||
Mastodont Profil |
#5 · Zasláno: 6. 9. 2010, 08:06:29
IMHO je lepší používat require a ještě o fous lepší require_once. Bez scházejícího souboru se většinou stejně nedá pokračovat.
|
||
kixs Profil * |
#6 · Zasláno: 6. 9. 2010, 11:42:14
Require se chová jinak než include pokud to provedu uvnitř funkce? Jinak require je asi lepší, ale proč require_once - v kódu to není nutné a zbytečně bych donutil php provádět kontrolu už vnořených souborů.
|
||
Nox Profil |
#7 · Zasláno: 6. 9. 2010, 12:09:19
kixs:
Ne... jen vyhodí fatální chybu místo varování, pokud se nepodaří soubor načíst _once samozřejmě dáš jen tam, kde se nesmí to stejné načíst víckrát Jinak hádám, že pro to _once má PHP nějaký interní seznam toho co už načetlo, neprovádí to nějakou kontrolu vnořeného...něčeho |
||
DoubleThink Profil * |
#8 · Zasláno: 6. 9. 2010, 15:18:52
kixs:
Takové zkracování kódu je na nic. Pokud máš moc includů, použij autoload. |
||
kixs Profil * |
#9 · Zasláno: 6. 9. 2010, 18:59:30
DoubleThink:
Autoload používám na třídy, které se můžou někdy hodit. Jenže autoload se nedá použít pokud potřebuju poskládat HTML stránku, kde head.php je hlavička ... |
||
Časová prodleva: 14 let
|
0