Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Zasięg Funkcji
Forum PHP.pl > Forum > Przedszkole
Ulysess
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ę 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
muk4
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
Ulysess
global czyli register globals questionmark.gif mam to wył i nie mam zamiaru wł 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 ?
phpion
Cytat(Ulysess @ 23.07.2010, 10:02:06 ) *
global czyli register globals questionmark.gif mam to wył i nie mam zamiaru wł 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.
Ulysess
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
nospor
Przeczytaj dokladnie to:
http://pl.php.net/manual/pl/language.variables.scope.php
Demongod
To zastosuj global tak jak podpowiedział Ci kolega muk4.
Ulysess
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..
nospor
jejkus... a jak masz w linku co dostales?

tak:
$test = 1;
global $test;

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

?
Spawnm
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;
Ulysess
aha czyli wpierw deklaruje że dana zmienna jest zmienną globalna , następnie przypisuje jej wartość questionmark.gif i jeszcze takie pytanie czy jest bezpiecznie używanie tego GLOBAL ?smile.gif
Demongod
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
phpion
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.
thek
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.
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.