Nowe posty

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

  • Gość
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: 3059
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
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
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

  • Gość
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;
}

ra-v

  • Gość
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.