Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dostęp do zmiennych globalnych w funkcji bez global?
Forum PHP.pl > Forum > PHP
StreetFighter
Witam,
Czy jest możliwość aby mieć dostęp w funkcji do zmiennych globalnych bez użycia global i tablicy global?
  1. <?php
  2. function testinc($file) {
  3. include $file;
  4. }


I teraz np z includowanego pliku chciałbym mieć dostęp do obiektów. Zastanawiam się jak to rozwiązać
viking
http://php.net/manual/en/functions.anonymous.php

Przykład 3.
nospor
@viking, przeciez obiekty o ktorych mowa sa w includowanym pliku a plik jest includowany w funkcji wink.gif
viking
Pytanie tak niejasne że mogłem nie zrozumieć. Tak czy inaczej raczej trzeba by się zastanowić czy tak pisany kod ma sens.
StreetFighter
Przepraszam że niejasno napisałem,
chciałbym osiągnąć możliwość dodawania plików z różnych katalogów przez funkcje.
Coś na zasadzie haków wp.

Startuje skrypt, includuje wszystkie pliki np start.php z katalogów mod1/ , mod2, mod3 itd

w każdym z tych plików mogę dołączyć się z jakimiś zmiennymi, obiektami itp np:
  1. //plik - mod1/start.php
  2. loadFooter('mod1/footer.php');
  3. loadBody('mod1/body.php');
  4.  
  5.  
  6.  
  7. //plik - mod1/body.php
  8.  
  9. $body = new Body();
  10. $body->foobar(); //
  11. $foo = 'bar2';
  12.  
  13. //plik - mod2/body.php
  14. $body->bar();
  15. echo $foo; //foo z pliku - mod1/body.php
  16.  


nie mam pomysłu jak to rozwiązać
gitbejbe
... google przestało działać ? Przecież chcesz zrobić loadera, sądzisz że to na tyle innowacyjna funkcja że ludzkość już czegoś w ty temacie nie wymyśliła ?

Proszę, masz pierwszy lepszy artykuł po Polsku, jedna z miliardów stron które opisują ten mechanizm : LINK

StreetFighter
niestety nie rozumiesz, przeczytaj kod, nospor wyjaśnił o co mi chodzi

funkcja w skrócie żeby zobrazować loadBody
  1. function loadBody($file){
  2. include $file;
  3. }


głównie chodzi mi oto czy ktoś ma jakiś pomysł jak rozwiązać oprócz używania tablicy $GLOBALS i globals $var
wymianę zmiennych między funkcjami, obiektem.

ewentualnie jak sensownie uzyskać inaczej ten efekt(tj pluginów)

edit:

jedyne co przychodzi mi na myśl to dodanie plików które chce includować np do tablicy i później gdzieś ich includowanie przez np foreach
gitbejbe
Jedyne co to w ładowanych plikach możesz mieć pozapisywane funkcje/klasy które zwracają/przyjmują jakieś zmienne i wtedy sobie używasz to gdzie chcesz i z czym chcesz
Pilsener
A z jakich to powodów nie może być $GLOBALS? Skoro potrzebujesz globalnego dostępu to zawsze to będzie złe, więc co za różnica jak to zrobisz? Jak trzeba robić po wuju to się robi jak najprościej a nie robi wuja do kwadratu z jakiegoś archaicznego skryptu.
StreetFighter
Ogólnie chciałem mieć dostęp do obiektu z funkcji bez global, bo na funkcjach lub metodach chciałem oprzeć moduły,pluginy, robiąc nawet prosta funkcje oparta o include nie masz już dostępu do zmiennych, musisz używać global,

Archaiczny powiadasz
viking
Poczytaj sobie o composer, wstrzykiwaniu zależności, może jakiś service manager, MVC.
StreetFighter
Ok a mam pytanie czy macie jakiś pomysł na rozwiązanie poniższego problemu:

  1. //index.php
  2. $foo = 3;
  3. $boo = 4;
  4. $... = 100;
  5.  
  6. function Load($tplname){
  7. include $tplname.'/templateDark.php';
  8. }
  9.  
  10.  
  11. Load('boo');
  12.  
  13. //templateDark.php
  14.  
  15. echo $foo;
  16. echo $boo;
  17. echo $...;//itd
  18. $r = 2;
  19.  
  20. //cd index.php
  21. echo $r;


edit: bez global i $GLOBALS ?
StreetFighter
Cytat(StreetFighter @ 18.10.2017, 16:16:16 ) *
Witam,
Czy jest możliwość aby mieć dostęp w funkcji do zmiennych globalnych bez użycia global i tablicy global?
  1. <?php
  2. function testinc($file) {
  3. include $file;
  4. }


I teraz np z includowanego pliku chciałbym mieć dostęp do obiektów. Zastanawiam się jak to rozwiązać


źle to sprecyzowałem,
chodziło mi bez ręcznego wpisywania dla każdej zmiennej, tylko żeby było to z automatu
trzczy
  1. <?php
  2. $_ENV['three']=3;
  3. $_ENV['four']=4;
  4. $_ENV['six']=6;
  5. $_ENV['ten']=10;
  6.  
  7. function someVarsSum(){
  8. echo $_ENV['three']+$_ENV['four']+$_ENV['six']+$_ENV['ten'] ;
  9. }
  10. someVarsSum(); //23

Deklarujesz w global scope elementy tablicy $_ENV i masz do nich dostęp w funkcjach.
viking
A dlaczego np nie zastosujesz systemu szablonów który wtedy sam w sobie jest kontenerem na zmienne?
StreetFighter
Cytat(trzczy @ 22.10.2017, 00:18:46 ) *
  1. <?php
  2. $_ENV['three']=3;
  3. $_ENV['four']=4;
  4. $_ENV['six']=6;
  5. $_ENV['ten']=10;
  6.  
  7. function someVarsSum(){
  8. echo $_ENV['three']+$_ENV['four']+$_ENV['six']+$_ENV['ten'] ;
  9. }
  10. someVarsSum(); //23

Deklarujesz w global scope elementy tablicy $_ENV i masz do nich dostęp w funkcjach.


to już wygląda lepiej:

  1. <?php
  2. $three=3;
  3. $for=4;
  4. $six=6;
  5. $ren=10;
  6.  
  7. function someVarsSum(){
  8. echo $GLOBALS['three']+$GLOBALS['four']+$GLOBALS['six']+$GLOBALS['ten'] ;
  9. }
  10. someVarsSum(); //23


edit: viking masz racje chyba pójdę w tą stronę
trzczy
Cytat(StreetFighter @ 22.10.2017, 20:19:12 ) *
to już wygląda lepiej:
To po co się pytasz, jak znasz odpowiedź.
StreetFighter
Wole czasami zapytać niż pisać nadmiar kodu, czasami można coś prościej rozwiązać niż ja na to wpadnę.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.