Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Publiczna zmienna w funkcji
Forum PHP.pl > Forum > Przedszkole
MMySlime
Witam,
pracuję nad stworzeniem klasy struktur (znanej bardzo dobrze z C++), niestety mam problem. Próbuję zrobić funkcję, która tworzy dla klasy publiczną zmienną. Dla przykładu, mamy zmienną $foo i chcemy do niej przypisać strukturę, więc przypisujemy do $foo funkcję assign ($foo = Struct::assign(Nazwa struktury)) i możemy korzystać ze struktury jako $foo->zmienne. Może mój błędny kod:

  1. static function assign($name){
  2.  
  3. $handler = new Struct;
  4.  
  5. $handler->rawSet(self::$bank[$$name]);
  6.  
  7. return $handler;
  8.  
  9. }
  10.  
  11. private function rawSet(array $vars){
  12.  
  13. foreach($vars as $key){
  14.  
  15. public $$key;
  16.  
  17. }
  18.  
  19. }


Kod błędu jest następujący:
Parse error: syntax error, unexpected 'public' (T_PUBLIC) in D:\User\Projekty\PHP\core\lib\struct.php on line 39

Dziękuję za pomoc! smile.gif
wookieb
  1. $this->{$key} = null;
Sephirus
Na pierwszy rzut oka widać co robisz źle - nie możesz deklarować własności klasy wewnątrz jej metody.

Jeśli chcesz uzyskać taki efekt to jedyne co mi przychodzi do głowy to użycie tablicy oraz własności __set oraz __get:

  1. private $_variables = array();
  2.  
  3. static function assign($name){
  4.  
  5. $handler = new Struct;
  6.  
  7. $handler->rawSet(self::$bank[$$name]);
  8.  
  9. return $handler;
  10.  
  11. }
  12.  
  13. private function rawSet(array $vars){
  14. $this->_variables = $vars;
  15. }
  16.  
  17. public function __get($key) {
  18. return isset($this->_variables[$key]) ? $this->_variables[$key] : null;
  19. }
  20.  
  21. public function __set($key,$value) {
  22. $this->_variables[$key] = $value;
  23. }
MMySlime
Dzięki wielkie! Właśnie tego mi było trzeba wink.gif
Oczywiście by nie być "żyła", daję pomógł smile.gif
zegarek84
teraz jestem z deczka "dziabnięty ;p" i nie chce mi się sprawdzać (już jakiś czas nie kodziłem w php), ale o ile pamięć mnie nie myli oba rozwiązania są poprawne, tzn. chciałbym tu zwrócić uwagę na podane rozwiązanie przez @wookieb... domyślnie jak pamiętam takie zmienne są publiczne, więc to co tu próbujecie osiągnąć, oprócz tego powinno to być szybsze... ktoś powie, że minusem tu może być wyzerowanie istniejącej zmiennej publicznej, z kolei drugie rozwiązanie jest z deczka wolniejsze i w tablicy przechowywane są zmienne nie zadeklarowane publicznie w danej klasie (choć to też można potraktować na +)...
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.