Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Tablica array w class
Forum PHP.pl > Forum > Przedszkole
dram
  1. class server_data {
  2. private $ip = array();
  3. private $name = array();
  4. private $pw = array();
  5.  
  6. function add_server($ip_c,$name_c,$pw_c){
  7. array_push($this -> ip,$ip_c);
  8. array_push($this -> name,$name_c);
  9. array_push($this -> pw,$pw_c);
  10. }
  11. public function show_data($srv_num){
  12. return array($this -> ip[$srv_num],$this -> name[$srv_num],$this -> pw[$srv_num]);
  13. }
  14. }


To moja piękna class-a dodaje(bądź nie dodaje) jakieś wartości do tablic zastosowywując add_server.

Funkcja show_data nic mi nie zwraca.
wookieb
A co ma Ci zwracać?
dram
ta classa ma za zadanie przechowywać dane dot. ftp serwerów

po dodaniu serwerów (add_server) chce te dane potem wyświetlić
showdata(1)
który zwróci mi tablice z ip,nickiem do logowania na ftp,haslem
wookieb
Chryste panie przenajświętszy... jak sie numerują elementy tablicy? Od 0
dram
zgadza się dlatego jak dodam np. 3 serwery i użyję:
showdata(1)

to powinno wyświetlić mi dane 2 serwera
wookieb
Pokaż cał kod. Bo ten nie ma za zadanie czegokolwiek wyświetlac.
mortus
@dram: Twoja funkcja jak najbardziej działa i zwraca (nie wyświetla) tablicę.
  1. $server = new server_data();
  2. $server->add_server('ip', 'name', 'pw');
  3. $server1 = $server->show_data(0);
  4. echo 'ip: ' . $server1[0] . '<br />';
  5. echo 'name: ' . $server1[1] . '<br />';
  6. echo 'pw: ' . $server1[2] . '<br />';

Natomiast to od Ciebie zależy, jak będziesz numerował elementy tablicy i tę kwestię musisz dopracować. Dodam jeszcze, że nie musisz ich numerować, a możesz nazywać (tablice asocjacyjne).
dram
Zmieniłem trochę klass-ę lecz nadal nie wyświetla mi tzn:

edit...
To co było to już mało istotne znalazłem głupi błąd lecz nie moge go wyelminować. Chodzi o to że tworzę dwa razy uchwyt do class-y w jednym zapisuje a w drugim odczytuje. (odczyt nie działa) jednak jak wszystko robie na jednym to działa. Tyle że chce skrypt rodzielić na 3 tj.

Skrypt główny > include("class.php"); > include("wczytywaczka.php");

Teraz po kolei:
skrypt główny(działający):
  1. <?php
  2.  
  3. include("inc/kop_class.php");
  4. $data = array(
  5. 'cos' => array('ip','nick','pw')
  6. );
  7. $obj2 = new server_data;
  8. foreach ( $data as $server_name => $server_data )
  9. {
  10. echo("DODANO $server_name <br>");
  11. $obj2 -> add_server($server_data[0],$server_data[1],$server_data[2],$server_name);
  12. }
  13.  
  14. var_dump($obj2 -> show_data(0));
  15. ?>

Efekt:
  1. ZALADOWANO
  2. DODANO cos
  3. array(4) { ["ip"]=> string(2) "ip" ["name"]=> string(4) "nick" ["pw"]=> string(2) "pw" ["sv_name"]=> string(3) "cos" }

Super działa.. Ale brak pożądanego efektu. (podzielenia tych skryptów).
Teraz nie działający ten do naprawienia:
  1. <?php
  2.  
  3. include("inc/kop_class.php");
  4. $data = array(
  5. 'cos' => array('ip','nick','pw')
  6. );
  7. $obj2 = new server_data;
  8. foreach ( $data as $server_name => $server_data )
  9. {
  10. echo("DODANO $server_name <br>");
  11. $obj2 -> add_server($server_data[0],$server_data[1],$server_data[2],$server_name);
  12. }
  13.  
  14. $obj = new server_data; // przez to
  15. var_dump($obj -> show_data(0)); // i przez to...
  16. ?>

EFEKT:
  1. ZALADOWANO
  2. DODANO cos
  3. NULL

Class-a:
  1. <?php
  2. echo "ZALADOWANO <br>";
  3. //include("server_data.php");
  4. class server_data {
  5. protected $FTP = array();
  6. function add_server($ip_c,$name_c,$pw_c,$sv_name){
  7. $this -> FTP[] = array('ip' => $ip_c, 'name' => $name_c, 'pw' => $pw_c,'sv_name' => $sv_name);
  8. //echo "Dodano ".$this -> FTP[0]['sv_name']."<br>";
  9. }
  10. function show_data($srv_num){
  11. //return array($this -> ip[$srv_num],$this -> name[$srv_num],$this -> pw[$srv_num]);
  12. //echo ($this -> FTP[0]['sv_name']);
  13. return $this -> FTP[$srv_num];
  14. }
  15. }
  16.  
  17. ?>


Jak zapewne się domyślacie z głównego skryptu chce wywalić add_server i wrzucić w odzielny który będzie wczytywany przez class-e.

baaasmiley.gif santa.gif

refresh

ref 2 specool.gif
wookieb
Proszę nie odświeżać tematu
mortus
No nie w taki sposób tego raczej nie zrealizujesz, bo przecież klasa server_data nie przechowuje danych ani w bazie, ani też w pliku, ani w pamięci cache, ani w sesji, a jedynie w pamięci operacyjnej, która jest alokowana dla każdego obiektu z osobna (stąd dwa obiekty tej samej klasy nie są ze sobą powiązane). Jeśli chcesz to zorganizować w jednym skrypcie, to poczytaj o wzorcu singleton lub/i metodach statycznych.
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.