Autor | Zpráva | ||
---|---|---|---|
xerno Profil |
#1 · Zasláno: 28. 7. 2013, 02:19:27
Zdravím kolegy,
už nějaký ten pátek mi jede server na CentOS s balíkem php54w. Zmiňuji to, neboť tuším, že je problém právě v tom. Jinde se mi jej nepodařilo replikovat. Vždy jsem předpokládal, že když definuji proměnnou, bude tím automaticky dostupná i ve všech includovaných scriptech a také v $GLOBALS. Ale u některých proměnných se stává, že je dostupná pouze v souboru, kde byla definována. Není v $GLOBALS a není ani v includovaných souborech. Původně jsem si myslel, že se phpku nelíbí místo kde proměnnou definuji, takže jsem ji zkusil definovat hned na začátku scriptu třeba přirazením datového typu (něco ve smyslu $obsah=[];)... nicméně to také nepomohlo. Pomůže pouze, když při prvním použití zapíšu $GLOBALS['obsah'] ...pak se s ní dá pracovat normálně jako předtím a je dostupná i v těch includovaných souborech. Skutečně nevím čím by to mohlo být, některé proměnné to dělají a jiné zase ne. Na internetu jsem se dočetl, že podobné problémy může způsobovat PHPUnit, ten ale nepoužívám. Nemůže to být nějakým nevhodným nastavením PHP? nebo existuje elegantnější docílení výsledku než $GLOBALS['promenna'] ? Bohužel server je to ostrý a protože scripty jsou psány pro PHP 5.4, nemohu si dovolit vyzkoušet downgrade. Ačkoli je problém vyřešen (ono pomůže i $bla=$obsah a v includovaném souboru pracovat s $bla místo $obsah), přesto bych rád našel zakopaného psa. Za jakýkoli podnět děkuji. |
||
ShiraNai7 Profil |
#2 · Zasláno: 28. 7. 2013, 14:45:20
Záleží na tom, kde se skript includuje. Includovaný soubor totiž dědí aktuální variable scope. Viz http://php.net/manual/en/language.variables.scope.php
Pokud potřebuješ nějaké globální registry, využij např. statické třídy/singletony.. i když to taky není ideální řešení. |
||
xerno Profil |
#3 · Zasláno: 29. 7. 2013, 23:26:56
ShiraNai7:
Těžko říct kde problém byl. Řekl bych, že variable scope se dědil normálně - co bylo v $GLOBALS v hlavním scriptu, to bylo i v includovaném souboru. Jen pár proměnných, které jsem si v hlavním scriptu definoval, s nimi se dalo pracovat pouze v hlavním scriptu a vůbec v $GLOBALS nebyly. V noci jsem odstranil komplet apache i php, poté znovu nainstaloval normál z repozitářů a vše nyní funguje. I přesto, že všechny konfiguráky zůstaly stejné, nyní to funguje. Skutečně jsem se s podobným problémem za celou svou praxi ještě nesetkal. Kde tedy problém byl asi už nikdo nezjistí. Nicméně je vyřešeno, zamykám tedy téma. Ještě pro zajímavost pár detailů: CentOS release 6.4 (Final), PHP 5.4.17, Apache/2.2.15. |
||
Časová prodleva: 11 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0