Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Dostęp do zmiennych globalnych w funkcji bez global?
StreetFighter
post 18.10.2017, 15:16:16
Post #1





Grupa: Zarejestrowani
Postów: 46
Pomógł: 2
Dołączył: 17.04.2017
Skąd: 127.0.0.1

Ostrzeżenie: (0%)
-----


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ć
Go to the top of the page
+Quote Post
viking
post 18.10.2017, 15:53:24
Post #2





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


http://php.net/manual/en/functions.anonymous.php

Przykład 3.


--------------------
Go to the top of the page
+Quote Post
nospor
post 18.10.2017, 15:55:25
Post #3





Grupa: Moderatorzy
Postów: 36 455
Pomógł: 6292
Dołączył: 27.12.2004




@viking, przeciez obiekty o ktorych mowa sa w includowanym pliku a plik jest includowany w funkcji wink.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
viking
post 18.10.2017, 16:02:41
Post #4





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Pytanie tak niejasne że mogłem nie zrozumieć. Tak czy inaczej raczej trzeba by się zastanowić czy tak pisany kod ma sens.


--------------------
Go to the top of the page
+Quote Post
StreetFighter
post 18.10.2017, 19:32:12
Post #5





Grupa: Zarejestrowani
Postów: 46
Pomógł: 2
Dołączył: 17.04.2017
Skąd: 127.0.0.1

Ostrzeżenie: (0%)
-----


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ć


Ten post edytował StreetFighter 18.10.2017, 19:34:27
Go to the top of the page
+Quote Post
gitbejbe
post 18.10.2017, 21:02:38
Post #6





Grupa: Zarejestrowani
Postów: 515
Pomógł: 63
Dołączył: 27.08.2012

Ostrzeżenie: (0%)
-----


... 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

Go to the top of the page
+Quote Post
StreetFighter
post 18.10.2017, 21:13:48
Post #7





Grupa: Zarejestrowani
Postów: 46
Pomógł: 2
Dołączył: 17.04.2017
Skąd: 127.0.0.1

Ostrzeżenie: (0%)
-----


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

Ten post edytował StreetFighter 18.10.2017, 21:22:48
Go to the top of the page
+Quote Post
gitbejbe
post 19.10.2017, 08:56:44
Post #8





Grupa: Zarejestrowani
Postów: 515
Pomógł: 63
Dołączył: 27.08.2012

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Pilsener
post 19.10.2017, 12:48:25
Post #9





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
StreetFighter
post 19.10.2017, 17:42:13
Post #10





Grupa: Zarejestrowani
Postów: 46
Pomógł: 2
Dołączył: 17.04.2017
Skąd: 127.0.0.1

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
viking
post 19.10.2017, 17:49:51
Post #11





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Poczytaj sobie o composer, wstrzykiwaniu zależności, może jakiś service manager, MVC.


--------------------
Go to the top of the page
+Quote Post
StreetFighter
post 20.10.2017, 20:47:16
Post #12





Grupa: Zarejestrowani
Postów: 46
Pomógł: 2
Dołączył: 17.04.2017
Skąd: 127.0.0.1

Ostrzeżenie: (0%)
-----


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 ?

Ten post edytował StreetFighter 20.10.2017, 20:47:43
Go to the top of the page
+Quote Post
gitbejbe
post 20.10.2017, 22:51:06
Post #13





Grupa: Zarejestrowani
Postów: 515
Pomógł: 63
Dołączył: 27.08.2012

Ostrzeżenie: (0%)
-----


https://stackoverflow.com/questions/4315271...n-included-file
Go to the top of the page
+Quote Post
StreetFighter
post 21.10.2017, 22:36:13
Post #14





Grupa: Zarejestrowani
Postów: 46
Pomógł: 2
Dołączył: 17.04.2017
Skąd: 127.0.0.1

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
trzczy
post 21.10.2017, 23:18:46
Post #15





Grupa: Zarejestrowani
Postów: 460
Pomógł: 49
Dołączył: 5.06.2011

Ostrzeżenie: (0%)
-----


  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.

Ten post edytował trzczy 21.10.2017, 23:22:05
Go to the top of the page
+Quote Post
viking
post 22.10.2017, 06:15:21
Post #16





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


A dlaczego np nie zastosujesz systemu szablonów który wtedy sam w sobie jest kontenerem na zmienne?


--------------------
Go to the top of the page
+Quote Post
StreetFighter
post 22.10.2017, 19:19:12
Post #17





Grupa: Zarejestrowani
Postów: 46
Pomógł: 2
Dołączył: 17.04.2017
Skąd: 127.0.0.1

Ostrzeżenie: (0%)
-----


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ę

Ten post edytował StreetFighter 22.10.2017, 19:20:25
Go to the top of the page
+Quote Post
trzczy
post 22.10.2017, 23:51:05
Post #18





Grupa: Zarejestrowani
Postów: 460
Pomógł: 49
Dołączył: 5.06.2011

Ostrzeżenie: (0%)
-----


Cytat(StreetFighter @ 22.10.2017, 20:19:12 ) *
to już wygląda lepiej:
To po co się pytasz, jak znasz odpowiedź.
Go to the top of the page
+Quote Post
StreetFighter
post 23.10.2017, 20:01:26
Post #19





Grupa: Zarejestrowani
Postów: 46
Pomógł: 2
Dołączył: 17.04.2017
Skąd: 127.0.0.1

Ostrzeżenie: (0%)
-----


Wole czasami zapytać niż pisać nadmiar kodu, czasami można coś prościej rozwiązać niż ja na to wpadnę.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.04.2024 - 10:47