[ Milan M. Radovic @ 21.01.2008. 01:28 ] @
Kako da dosegnem promenjive koje su van funkcije u funkciji? Da li postoji neki nacin sem da ih proglasim za Global... |
[ Milan M. Radovic @ 21.01.2008. 01:28 ] @
[ mb_sa @ 21.01.2008. 06:23 ] @
Code: function Ime ($a) { global $b; retrun $a+$b; } [ Nemanja Avramović @ 21.01.2008. 09:19 ] @
Ne znam baš da li možeš na neki drugi način. Zašto uopšte želiš da ih ne proglašavaš za global?
[ mb_sa @ 21.01.2008. 13:12 ] @
Ja ne pročitah da traži način izuzev da ih proglasi globalnim varijablama!
Jedino da konstante koristiš :D [ Milan M. Radovic @ 21.01.2008. 17:12 ] @
Citat: Nemanja Avramović: Ne znam baš da li možeš na neki drugi način. Zašto uopšte želiš da ih ne proglašavaš za global? [ afwt @ 21.01.2008. 18:24 ] @
Ovo radi odakle god hoces:
$GLOBALS['mojaVarijabla'] = 'neka vrednost'; dakle, i ovo isto: echo $GLOBALS['mojaVarijabla']; Praktican primer: Code: <?php function x() {$GLOBALS['mojaVarijabla'] = 'neka vrednost';} function y() {echo $GLOBALS['mojaVarijabla'];} x(); y(); ?> [ Skaarj @ 21.01.2008. 19:24 ] @
^
I ovo je niz globalnih varijabli. Ne mozes da uradis ono sto si zamislio tj neces bas tako lako preci sa funkcija na klase. Ako zelis klase, promenljive definisane u okviru klase su vidljive funkcijama koje su u okviru te klase. Ako nema klasa onda je global resenje za razmenu ili da varijablu prenosis kroz parametar funkcije. Ukratko po pitanju klase to bi bilo ovako: Code: class Pera { private $ime; function __construct($ime) { $this->ime=$ime; } function printIme(){ echo $this->ime; } } [Ovu poruku je menjao Nemanja Avramović dana 21.01.2008. u 23:42 GMT+1] [ b0ris @ 22.01.2008. 17:34 ] @
Malo ti je zahtev cudan mora da priznam. Da prelazis sa funkcija na klase. Zasto odma nebi pravio klase?
Inace nije jedini nacin je da definises globalnu promenljivu. Mozes da napravis funkciju koja ce da ti vraca te promenljive, pa da unutar svoje funkcije pozivas tu funkciju. Na slican nacin je u ATK uradjeno pozivanje config promenljivih, koristi se getConfig("ime promenljive") funkcija. Skini kod pa pregledaj kako to radi ;) http://www.achievo.org/atk [ mjerkov @ 27.01.2008. 19:57 ] @
Pa standardno kao u svim programskim jezicima....definisi promenljive kao globalne izvan zagrada bilo koje funkcije...
$var1 // Globalna promenljiva function test1() { ..... } function test2() { ..... } [ dakipro @ 27.01.2008. 20:23 ] @
Hajde Mladene pojasni malo ovaj tvoj primer do kraja, jer se bojim da ce ispasti pogresan.
Neces moci pozvati promenjivu unutar funkcije samo ako si je definisao "izvan zagrada". [ holodoc1701 @ 03.02.2008. 00:10 ] @
Moj predlog se možda učini malo radikalnim ali ako ti je potrebno da prevaziđeš ograničenja stateless protokola kakav je HTTP zašto ne bi iskoristio prednosti sesionih promenjljivih. Sesione promenjljive su zato i napravljene zar ne? :)
Dakle, umesto dodeljivanja globalnog scope-a bilo kojoj promenjljivoj lepo se na početku skripte aktivira sesija i po potrebi rade sve manipulacije sa sesionim promenjljivama koje se smeštaju na serveru i koje su vidljive u kompletnom skriptu :) Na taj način developer ne mora da razmišlja o tome koje su mu promenjljive trenutno vidljive u kom delu koda već je sve lepo i uredno smešteno u $_SESSION superpromenljivu :) [ dakipro @ 03.02.2008. 01:32 ] @
Pa sad ako cemo po definicijama, nije bas tako...
![]() Kako pise u manualu: Citat: Session support in PHP consists of a way to preserve certain data across subsequent accesses. This enables you to build more customized applications and increase the appeal of your web site. uz upozorenje Citat: Some types of data can not be serialized thus stored in sessions. It includes resource variables or objects with circular references (i.e. objects which passes a reference to itself to another object). Sto ukratko ukazuje da se u sesiji cuvaju podatci pojedinacnog korisnika, kako bi se lakse personalizovala aplikacija. Podatci kao sto su: username, trenutni jezik, mozda sadrzaj shoping karte, interna navigacija, poslednja pretraga, paginacija, broj rekorda po stranici paginacije, itd. Znaci podatci koji su direktno vezani za odredjenog korisnika, ne za samu aplikaciju. Tako je recimo neprikladno (a i nesigurno) smestiti objekat koji radi sa bazom u sesiju, samo da bi bio dostupan svim funkcijama i metodama. U vecini slucajeva se sesija cuva u fajlu, i opet u vecini slucajeva je taj fajl u sherovanom folderu na shared hostingu, pa bi otkrivanje nekog ovakvog fajla sa serijalizovanim objektom konekcije na bazu dovelo do ozbiljnog propusta. Takodje se objekti cuvaju u memoriji, dok je sesija opet, cesto u fajlu ili u bazi, sto je nepotrebno zauzimanje resursa. Bas je iz tih razloga i kreirana superglobalna promenjiva $GLOBALS Citat: An associative array containing references to all variables which are currently defined in the global scope of the script. The variable names are the keys of the array. This is a 'superglobal', or automatic global, variable. This simply means that it is available in all scopes throughout a script. You don't need to do a global $GLOBALS; to access it within functions or methods. Sto znaci da se ovde smestaju reference ka promenjivama, ne pravi se kopija promenjive kao sto je to slucaj sa sesijom, sto itekako cuva resurse, pogotovo sa velikim objektima koji nisu direktno povezani sa pojedinacnim korisnikom. A uvek postoji mogucnost da je korisnik iskljucio cookies, tako da potpuno oslanjanje na sesiju u ovom slucaju pada u vodu ![]() [ holodoc1701 @ 03.02.2008. 02:37 ] @
@dakipro
Zato sam i napomenuo da je rešenje malo radikalno pošto je globalno definisanje promenjljive već odbačeno u samom startu a $GLOBALS super promenjljiva već pomenuta pa rekoh ajde da pomenem i sesije kao opciju ![]() Što se tiče $GLOBALS superpromenljive ni ona nije bez mana. Uopšte svaki pristup programiranju u kome se kod oslanja na proglašavanje nečega da je "vidljivo" na globalnom nivou je loš. Evo jednog interesantnog članka koji ukratko objašnjava najznačajnije kritične tačke $GLOBALS niza kao i razloge gde i kada ga ne treba koristiti ![]() ![]() http://www.hardened-php.net/globals-problem [ b0ris @ 04.02.2008. 07:36 ] @
Interesantan clanak.
Doduse ne mora da brinemo o toj kompatibilnosti (php4 - php5) buduci da je php4 od nove godine istorija ;) inace svidja mi se primer iz clanka. [ holodoc1701 @ 05.02.2008. 17:19 ] @
Citat: b0ris: Interesantan clanak. Doduse ne mora da brinemo o toj kompatibilnosti (php4 - php5) buduci da je php4 od nove godine istorija ![]() inace svidja mi se primer iz clanka. Da ali činjenica da nešto nije više oficijelno podržano od strane proizvođača ne znači da se isto to neće još dugo vrteti na serverima ![]() Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|