Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Zasięg Funkcji
Ulysess
post
Post #1





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

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


witam mam takie pytanie/problem a dokładniej ... chciałbym pewien fragment kodu wrzucić do funkcji i zapisać to w pliku funkcje.pl - tak też zrobiłem . ALE pojawił się problem otoż.. funkcja x jest includowana z pliku funkcje.pl następnie jest wywoływana i chciałbym aby zwracała wartości pewnych zmiennych lecz zauważyłem że zasięg zmiennych ogranicza się do pliku funkcje.php . mam racje czy się mylę (IMG:style_emoticons/default/questionmark.gif) pytam bo wywala mi NOTICE -> Notice: Undefined variable: ogol_sila in E:\VertrigoServ\www\gra\test.php on line 12 a zmienna ogol_sila jest stworzona w funkcje.php ma wartosc i jest includowana w test.php
Go to the top of the page
+Quote Post
muk4
post
Post #2





Grupa: Zarejestrowani
Postów: 309
Pomógł: 56
Dołączył: 3.11.2006
Skąd: Gliwice

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


spróbuj dać przed zmienną słowo "global":
  1. global $ogol_sila

Jeżeli to nie pomoże, to pokaż nam te dwa pliki test.php i funkcie.php


Cytat
zapisać to w pliku funkcje.pl

Chyba funkcje.php

Ten post edytował muk4 23.07.2010, 02:21:46
Go to the top of the page
+Quote Post
Ulysess
post
Post #3





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

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


global czyli register globals (IMG:style_emoticons/default/questionmark.gif) mam to wył i nie mam zamiaru wł (IMG:style_emoticons/default/smile.gif) hmm czyli jeśli chce aby dany kod został wykonany i zwrócił kilka/kilkanaście zmiennych musze dać zwykły kod w include bo zmienne w funkcji działają tylko w niej ?
Go to the top of the page
+Quote Post
phpion
post
Post #4





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Cytat(Ulysess @ 23.07.2010, 10:02:06 ) *
global czyli register globals (IMG:style_emoticons/default/questionmark.gif) mam to wył i nie mam zamiaru wł (IMG:style_emoticons/default/smile.gif)

global nie ma nic wspólnego z register_globals. Oznaczenie zmiennej w funkcji jako global spowoduje, że będzie to zmienna spoza funkcji.
Go to the top of the page
+Quote Post
Ulysess
post
Post #5





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

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


chciałem to zrobić tak :

test.php

  1. include('inc_features.php');
  2. statystyki_postaci($user,0,1);
  3. echo $ogol_sila;


do funkcji są przekazywane 3 parametry id usera, 2 usera i ilosc wywolan petli
funkcja oblicza 'cos' na podstawie tych danych i chciałbym aby zmienną $ogol_sila (ktora pochodzi z zawartości funkcji) wyświetlić , lub dalej przetwarzać w pliku test.php

funkcja jest wywoływaa
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Przeczytaj dokladnie to:
http://pl.php.net/manual/pl/language.variables.scope.php
Go to the top of the page
+Quote Post
Demongod
post
Post #7





Grupa: Zarejestrowani
Postów: 11
Pomógł: 2
Dołączył: 25.06.2010

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


To zastosuj global tak jak podpowiedział Ci kolega muk4.
Go to the top of the page
+Quote Post
Ulysess
post
Post #8





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

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


hmmm dla testu zrobiłem:

plik inc_features.php
  1. function statystyki_postaci($atakujacy,$obronca,$ilosc)
  2. {
  3. $test = 1;
  4. global $test;
  5. }


i plik test.php
  1.  
  2. include('inc_features.php');
  3.  
  4. statystyki_postaci($user,0,1);
  5.  
  6. echo $test;
  7.  


niestety w pliku test.php nic mi nie wyświetla..
Go to the top of the page
+Quote Post
nospor
post
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




jejkus... a jak masz w linku co dostales?

tak:
$test = 1;
global $test;

czy moze jednak tak:
global $test;
$test = 1;

?
Go to the top of the page
+Quote Post
Spawnm
post
Post #10





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




a może daj return ?
  1. statystyki_postaci($user,0,1){
  2. return 'jakieś coś :) ';
  3. }
  4.  
  5. $wynik=statystyki_postaci($user,0,1);
  6. echo $wynik;
Go to the top of the page
+Quote Post
Ulysess
post
Post #11





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

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


aha czyli wpierw deklaruje że dana zmienna jest zmienną globalna , następnie przypisuje jej wartość (IMG:style_emoticons/default/questionmark.gif) i jeszcze takie pytanie czy jest bezpiecznie używanie tego GLOBAL ?(IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Demongod
post
Post #12





Grupa: Zarejestrowani
Postów: 11
Pomógł: 2
Dołączył: 25.06.2010

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


Cytat(phpion)
global nie ma nic wspólnego z register_globals. Oznaczenie zmiennej w funkcji jako global spowoduje, że będzie to zmienna spoza funkcji.

Tak, bezpieczne
Go to the top of the page
+Quote Post
phpion
post
Post #13





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Cytat(Demongod @ 23.07.2010, 10:36:15 ) *
Tak, bezpieczne

No nie do końca. Bezpieczne jest pod kątem prób włamań, natomiast może powodować trudne do zlokalizowania błędy. Trzeba uważać by nie doszło do kolizji nazw zmiennych i ewentualnego nadpisywania wartości.
Go to the top of the page
+Quote Post
thek
post
Post #14





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




To zrób inaczej. Globali nie powinno się używać z powodów bezpieczeństwa danych i tego co jest tutaj powodem tematu -> zasięg zmiennych. Nie wiesz nigdy, czy nie przesłonisz globalem jakiejś innej zmiennej o tej samej nazwie. Lepiej daną zmienną wrzucić jako parametr a zwrócić poprzez return. Ewentualnie, jeśli wiesz co robisz, użyć referencji.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 25.08.2025 - 05:34