Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> $var = funkcja() przed jej zdefiniowaniem
MESSIAH :)
post 14.11.2019, 16:45:50
Post #1





Grupa: Zarejestrowani
Postów: 249
Pomógł: 0
Dołączył: 22.12.2011

Ostrzeżenie: (10%)
X----


Czy moze mi ktos wytlumaczyc dlaczego w PHP czasem definiuje sie funkcje w zmiennej przed jej zaistnieniem w kodzie?
Przyklad:
  1. $Id = "xxx";
  2. $Pw = "zzz";
  3.  
  4. $var = gettext($Id, $Pw);
  5.  
  6. return $var;
  7.  
  8. function gettext($Id, $Pw)
  9. {
  10. ...
  11. return $var;
  12. }


Wedlug mnie powinno byc odwrotnie ze najpierw funkcja a pozniej przypisanie funkcji do zmiennej. Czy taki kod ma sens:

  1. $Id = "xxx";
  2. $Pw = "zzz";
  3.  
  4. function gettext($Id, $Pw)
  5. {
  6. ...
  7. return $var;
  8. }
  9.  
  10. $var = gettext();
  11.  
  12. return $var;


Ten post edytował MESSIAH :) 14.11.2019, 16:56:40


--------------------
Go to the top of the page
+Quote Post
nospor
post 14.11.2019, 16:47:32
Post #2





Grupa: Moderatorzy
Postów: 36 441
Pomógł: 6290
Dołączył: 27.12.2004




Cytat
dlaczego w PHP czasem definiuje sie funkcje w zmiennej przed jej zaistnieniem w kodzie?

Bo mozna.


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

"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
MESSIAH :)
post 14.11.2019, 16:55:40
Post #3





Grupa: Zarejestrowani
Postów: 249
Pomógł: 0
Dołączył: 22.12.2011

Ostrzeżenie: (10%)
X----


Ale czy to ma jakies sensowne wytlumaczenie? Czy poprostu jakis blad kompilatora? Chyba czytelniej jest definiowac po kolei wszystko niz pozniej szukac krowy w polu Bog wie gdzie i w jakim pliku.


--------------------
Go to the top of the page
+Quote Post
nospor
post 14.11.2019, 17:02:05
Post #4





Grupa: Moderatorzy
Postów: 36 441
Pomógł: 6290
Dołączył: 27.12.2004




Niektorzy lubia definiowac funkcje na dole i tyle wink.gif

Poza tym teraz juz nie pisze sie strukturalnie tylko w klasach - a tam to ma juz inny sens.


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

"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
MESSIAH :)
post 14.11.2019, 17:29:38
Post #5





Grupa: Zarejestrowani
Postów: 249
Pomógł: 0
Dołączył: 22.12.2011

Ostrzeżenie: (10%)
X----


Jak widze najwieksze firmy potrafia pisace strukturalnie gdyz ten kod wyzej pochodzi z oficjalnego repozytorium duzej swiatowej firmy.


--------------------
Go to the top of the page
+Quote Post
nospor
post 14.11.2019, 17:58:57
Post #6





Grupa: Moderatorzy
Postów: 36 441
Pomógł: 6290
Dołączył: 27.12.2004




Jak to mowia: jedzmy gowno, miliony much nie moze sie mylic wink.gif

Do wiekszosci normalnych firm, jak nie znasz obiektowki to raczej mozesz nawet nie startowac. Ale jak wolisz celowac w te pare firm, ktore leca jeszcze strukturalnie, to oczywiscie nikt ci nie broni smile.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
Tomplus
post 14.11.2019, 22:10:33
Post #7





Grupa: Zarejestrowani
Postów: 1 831
Pomógł: 225
Dołączył: 20.03.2005
Skąd: Będzin

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


Dlaczego uważasz, że to błąd parsera skoro jest to element który jest wytłumaczony nawet w manualu PHP?

https://www.php.net/manual/en/functions.user-defined.php

Parser znajduje wszystkie funkcje które nie są uwarunkowane i one działają. Uwarunkowane muszą poczekać przed wywołaniem.

Go to the top of the page
+Quote Post
MESSIAH :)
post 14.11.2019, 23:07:07
Post #8





Grupa: Zarejestrowani
Postów: 249
Pomógł: 0
Dołączył: 22.12.2011

Ostrzeżenie: (10%)
X----


Cytat(Tomplus @ 14.11.2019, 22:10:33 ) *
Dlaczego uważasz, że to błąd parsera skoro jest to element który jest wytłumaczony nawet w manualu PHP?

https://www.php.net/manual/en/functions.user-defined.php

Parser znajduje wszystkie funkcje które nie są uwarunkowane i one działają. Uwarunkowane muszą poczekać przed wywołaniem.

Skoro parser skanuje linia po linii caly plik i pozniej wraca na poczatek pliku to chyba jest to strata czasu lub blad parsera.
To tak jak malowac sciane pas po pasie a pozniej robic to od nowa.
Nawet nie chce wiedziec ile mozna razy wracac z konca pliku na poczatek w php bo pewnie ograniczy to moja wyobraznie.


--------------------
Go to the top of the page
+Quote Post
SmokAnalog
post 15.11.2019, 00:31:24
Post #9





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


W JavaScripcie też to masz. To się nazywa hoisting. W przypadku javascriptowych zmiennych w starym stylu (var) jest to faktycznie trochę niezręczne, ale już w przypadku funkcji niekoniecznie. Potraktuj kod jako zbiór deklaracji i instrukcji, gdzie deklaracje po prostu są, nieważne gdzie. Na tej samej zasadzie, co w klasie, gdzie kolejność metod też przecież nie ma znaczenia. Nie musi to być niewydajne, interpreter zapewne optymalizuje drugi przebieg.
Go to the top of the page
+Quote Post
Tomplus
post 15.11.2019, 09:38:49
Post #10





Grupa: Zarejestrowani
Postów: 1 831
Pomógł: 225
Dołączył: 20.03.2005
Skąd: Będzin

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


Jak malujesz ścianę, to najpierw robisz podkład, a dopiero potem nakładasz farbę.
Go to the top of the page
+Quote Post
nospor
post 15.11.2019, 10:27:24
Post #11





Grupa: Moderatorzy
Postów: 36 441
Pomógł: 6290
Dołączył: 27.12.2004




Cytat
Skoro parser skanuje linia po linii caly plik i pozniej wraca na poczatek pliku to chyba jest to strata czasu lub blad parsera.
Chyba troche za bardzo upraszczasz proces i mylisz pojecia parser/kompilator/wykonywanie.
Parser nie lata po milion razy po tym samym pliku. Parser leci raz i raz parsuje tylko po czym twoj kod jest zamieniany na kod maszynowy a tam to juz wyglada zupelnie inaczej


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

"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
MESSIAH :)
post 16.11.2019, 12:12:37
Post #12





Grupa: Zarejestrowani
Postów: 249
Pomógł: 0
Dołączył: 22.12.2011

Ostrzeżenie: (10%)
X----


Cytat(Tomplus @ 15.11.2019, 09:38:49 ) *
Jak malujesz ścianę, to najpierw robisz podkład, a dopiero potem nakładasz farbę.

Ale nie maluje scian po 100 razy tak jak mozna to robic w PHP

Cytat(nospor @ 15.11.2019, 10:27:24 ) *
Chyba troche za bardzo upraszczasz proces i mylisz pojecia parser/kompilator/wykonywanie.
Parser nie lata po milion razy po tym samym pliku. Parser leci raz i raz parsuje tylko po czym twoj kod jest zamieniany na kod maszynowy a tam to juz wyglada zupelnie inaczej

Czyli jak dziala PHP? Najpierw skanuje caly plik do pamieci i gdy na koncu znajdzie wywolanie funkcji wtedy z pamieci RAM wraca do linii z funkcja? Jesli by tak bylo to musialo by to znaczyc iz PHP zapisuje funkcje w pamieci uzywajac dodatkowo oznaczenia dla danej linii gdzie odszukac funkcje.


--------------------
Go to the top of the page
+Quote Post
viking
post 16.11.2019, 12:45:55
Post #13





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

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


https://www.sitepoint.com/how-php-executes-...code-to-render/


--------------------
Go to the top of the page
+Quote Post
Tomplus
post 16.11.2019, 17:01:27
Post #14





Grupa: Zarejestrowani
Postów: 1 831
Pomógł: 225
Dołączył: 20.03.2005
Skąd: Będzin

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


W innych językach istnieje kompilator którzy przetwarza kod do pliku który można wywołać. PHP też musi sprawdzić najpierw czy wszystko działa.


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: 16.04.2024 - 14:02