Nowe posty

xx Przy uploadzie przerywane są wszystkie połączenia (1)
Dzisiaj o 09:38:09
xx Apache2 i twarde https (3)
2020-05-25, 15:53:43
xx Czy istnieje emulator terminala który zapamieta komendy na jakiejś liście? (9)
2020-05-23, 17:04:57
xx RTLinux wybór dystrybucji (0)
2020-05-23, 15:42:54
xx Problem z instalacją Ubuntu na bootowalnym pendrajwie (9)
2020-05-22, 15:08:12
xx Ubuntudde 20.04 LTS nie działa Lightdm (8)
2020-05-22, 09:16:42
xx [Gra za darmo] GTA5 (1)
2020-05-20, 21:49:26
xx Marketing (1)
2020-05-13, 08:00:41
xx Polecenia Debian (1)
2020-05-10, 19:58:54
xx Uruchamianie pliku z każdego katlogu (2)
2020-05-10, 19:23:33

Autor Wątek: mysql implementacja klasowa - zmienna statyczna?  (Przeczytany 5118 razy)

Offline

  • Users
  • Prawie jak Guru
  • ****
  • Wiadomości: 272
    • Zobacz profil
mysql implementacja klasowa - zmienna statyczna?
« dnia: 2010-02-19, 01:06:35 »
Próbowałem stworzyć implementację klasową mysql. Chciałem zrobić to tak:

class mysql_device {
private static  $connection;
private static $server;
private static $login;
private static $password;
private $database;
private $error;

function mysql_device($server, $login, $password){
$this->connection = mysql_connect ($server, $login, $password);
if ($this->connection==NULL) return false; else return true;
}

class database extends mysql_device {

private $database_name;

function database ($name){
$this->database_name = $name;
}

Myślałem, że skoro stworzyłem sobie zmienną statyczną w klasie to będzie widoczna we wszystkich egzemplarzach a tak to nie jest. Dlaczego i jak mogę to ominąć ?

function list_tables (){
$query = "SHOW TABLES";
$pointer = mysql_query ($query, $this->connection);
if ($pointer!=NULL){
$result = array ();
for ($i=0; $i$record = mysql_fetch_array ($pointer);
$result[] = $record[0];
}
return $result;
}
}

Chciałem taką sobie wywołać ale pojawił się błąd o złej wartosci mysql linka (NULL)

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 2597
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
    • keybase.io/pkraszewski
mysql implementacja klasowa - zmienna statyczna?
« Odpowiedź #1 dnia: 2010-02-19, 07:16:43 »
private static $connection;

Zmienne private nie są widziane w podklasach. Tu potrzebujesz protected.
Paweł Kraszewski
~Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

Offline

  • Users
  • Prawie jak Guru
  • ****
  • Wiadomości: 272
    • Zobacz profil
mysql implementacja klasowa - zmienna statyczna?
« Odpowiedź #2 dnia: 2010-02-19, 08:26:44 »
Ok zmieniłem:

class mysql_device {
protected static  $connection;
protected static $server;
protected static $login;
protected static $password;
protected $database;
protected $error;

function mysql_device($server, $login, $password){
$this->connection = mysql_connect ($server, $login, $password);
if ($this->connection==NULL) return false; else return true;
}


Ale w funkcji klasy database function list_tables (){
$query = "SHOW TABLES";
$pointer = mysql_query ($query, $this->connection);
if ($pointer!=NULL){
$result = array ();
for ($i=0; $i$record = mysql_fetch_array ($pointer);
$result[] = $record[0];
}
return $result;
}
}

nadal nie widzi connection


Warning:  mysql_query(): supplied argument is not a valid MySQL-Link resource in /var/www/mysql/database.php on line 23

object(database)#2 (3) {
  ["database_name:protected"]=>
  string(6) "serwis"
  ["database:protected"]=>
  NULL
  ["error:protected"]=>
  NULL
}


function get_database($name){
$name = addslashes($name);

$this->change_database ($name);
$database = new database ($name);
return $database;
}

Offline Rafi X

  • Users
  • Guru
  • *****
  • Wiadomości: 758
  • Nie ufaj nikomu w internecie. Nawet mi..
    • Zobacz profil
    • Google+ / Tech
mysql implementacja klasowa - zmienna statyczna?
« Odpowiedź #3 dnia: 2010-02-19, 22:40:46 »
a próbowałeś jak niżej?
self::connection = mysql_connect ($server, $login, $password);
jeśli to zadziała to  podobnie trzeba przerobić kod dla innych zmiennych statycznych.
PC: AsRock, AMD FX-6300, 8GB DDR3, Palit GTX 680, SanDisk Ultra II 240GB, Seagate 500GB, openSUSE 42.1
Laptop: C2D T7300, 4GB DDR2, GeForce 8600 GS, Samsung 500 GB, openSUSE 42.1
Mobilnie: Moto G 1gen (Android 5.1), Lumia 625 (Windows 10), iPhone 4 (iOS 7.1.2), Nokia 6310i