Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Zasięg zmiennych
Forum PHP.pl > Forum > Przedszkole
perhydrol
Witam,

mam problem z zasięgiem widoczności zmiennych w klasie, chciałem zdefiniować sobie w pliku:

error_.php
  1. <?php
  2. $error_ = array(
  3.    'empty_basket'        => 'Koszyk pusty.',                                # Info
  4.    'add_item'            => 'Dodano produkt do koszyka.',                    # Info
  5.    'del_item'            => 'Usunięto produkt z koszyka.',                    # Info
  6.    'upate_item'        => 'Zmieniono ilość sztuk produktu.',                        # Info
  7.    'update_price_bc'    => 'Aktualizacja ceny, uwzględniając liczbę punktów BC.',        # Info
  8.  );
  9. ?>


następnie daję w pliku index.php:

  1. <?php
  2. require_once( 'mod/error_.php' );  #Plik zawierający komunikaty.
  3. require_once( 'mod/basket.php' ); #Plik zawierający klasę obsługującą Koszyk.
  4. ...
  5. ?>


i teraz jak chce użyć zmiennej z pliku error_.php np tak:

  1. <?php
  2. class basket {
  3.    var $items;
  4.    var $total_sum;
  5.  
  6. // Dodaj nowy produkt do koszyka || zwiększ ilosc
  7. function add_item($id, $count)
  8.    {
  9.         .......
  10.         $this->msg = $error_['add_item'];
  11.        }
  12. ....
  13. ?>


Czy można w jakiś sposób uczynić tę zmienną "$error_[ ]" widoczna w innych klasach,
dodam może że nie chciał bym za każdym razem przy wywołaniu danej funkcji z klasy przekazywać tej zmiennej
np:
  1. <?php
  2. $basket    ->    add_item($id_item, $count, $error_),
  3. ?>
nospor
tu masz wszystko opisane
http://pl.php.net/manual/pl/language.variables.scope.php
perhydrol
hehe, DZIĘKI WIELKIE smile.gif

kurde a ja myślałem że musze przy definiowaniu zmiennej określić jej zasięg
więc robiłem to w pliku:

error_.php
  1. <?php
  2. global $error_;
  3. ?>


a tu się dowiaduje że odwrotnie smile.gif
yahoo.gif
Crozin
Użycie globala to najgorsze z dostępnych rozwiązań.
perhydrol
a czy mógł byś się podzielić "Crozin" własnymi spostrzeżeniami?

Dlaczego nie global, no i skoro nie global to co polecasz?

Będę naprawdę wdzięczny.
Crozin
O tym dlaczego global jest zły pisano nie jeden raz - poszukaj. Alternatywa? Przekazanie zmiennej jako parametr funkcji, czy skorzystanie np. z rejestru.
perhydrol
o przekazywaniu zmiennej tablicowej do funkcji w klasie wspominałem na początku, nie chciał bym przy każdorazowym wywołaniu funkcji przekazywać jej, dlatego zapytałem tu na forum, czy jest jakaś inna metoda.

Co do rejestru - to nie mogę nic znaleźć na googlu ani na forum
http://www.google.pl/search?hl=pl&clie...=Szukaj&lr=

z wadami GLOBAL też jakoś nie mogę nic sensownego znaleźć
może ktoś w kilku słowach napisać mi, lub podać, pod jaką frazą szukać
Rejestru
i
GLOBAL (wad)



-dzieki.
erix
registry pattern
perhydrol
mam jeszcze jedno małe pytanie co do zmiennych.

Czy może mi ktoś powiedzieć w jaki sposób zrobić "auto - nazywanie" zwracanych zmiennych przez funkcje w klasie

chodzi mi o coś takiego:
  1. <?php
  2. function query($query, $query_name)
  3.   {
  4.  
  5.    ......
  6.        $result = array();
  7.        ......
  8.  
  9.       return $result;
  10.   }
  11.  
  12. $ob -> query("select * from kategoria", "kategoria");
  13. ?>


$ob -> query("select * from kategoria", "kategoria");

i teraz chciał bym aby funkcja zwróciła tablice o nazwie $kategoria[]


-wiem że można w taki poprostu:
$kategoria = $ob -> query("select * from kategoria");
Crozin
  1. <?php
  2. $kategoria = $ob -> query("select * from kategoria");
  3. ?>
Tak można i najlepiej tak właśnie zrób.
  1. <?php
  2. $ob -> query("select * from kategoria", &$kategoria);
  3.  
  4. public function query($sql, &$var){
  5.  $var = array('abc');
  6. }
  7. ?>
erix
PDO ma wbudowane bindValue.
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.