Ik loop nu al een tijdje tegen een probleem aan waar ik geen oplossing voor kan vinden.
Het probleem is als volgt:
Ik heb een class die heet Database hierin staan een aantal methods om gegevens uit de database te halen, deze methods worden door andere classes gebruikt als ze gegevens uit de database moeten hebben.
Een stukje van mijn database class:
Wat ik voorheen deed was het volgende:
Oftewel, de class Music overerft Database om gebruik te maken van die Methods.
Nu ben ik er achter gekomen dat dit niet een nette manier van programmeren is, de Database class heeft namelijk niks de maken met de Music class.
Nu ben ik aan het zoeken wat wel netjes is, en heb ik het volgende gedaan:
Ik dacht dat dit wel netjes was en zou werken, helaas krijg ik nu de foutmelding:
Fatal error: Call to a member function Select() on a non-object in pad../classes/Music.php
De classes worden geladen met me functie __autoload bovenaan de index.php.
Iemand enig idee waarom dit niet goed gaat, en wat de beste oplossing is voor mijn problemen?
Het probleem is als volgt:
Ik heb een class die heet Database hierin staan een aantal methods om gegevens uit de database te halen, deze methods worden door andere classes gebruikt als ze gegevens uit de database moeten hebben.
Een stukje van mijn database class:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| class Database { protected $db_link; public function __construct($db_link) { $this->db_link = $db_link; } public function Select($sql) { $query = $this->db_link->query($sql); if($query->num_rows) { while($row=$query->fetch_assoc()) { $data[]=$row; } return $data; } else { return false; } } } |
Wat ik voorheen deed was het volgende:
PHP:
1
2
3
4
5
6
| class Music extends Database { public function Overview(){ $sql="SELECT * FROM `tabel` LIMIT 1000"; return $this->Select($sql); } } |
Oftewel, de class Music overerft Database om gebruik te maken van die Methods.
Nu ben ik er achter gekomen dat dit niet een nette manier van programmeren is, de Database class heeft namelijk niks de maken met de Music class.
Nu ben ik aan het zoeken wat wel netjes is, en heb ik het volgende gedaan:
PHP:
1
2
3
4
5
6
7
8
9
| class Music { public function __construct($db_link) { $database = new Database($db_link); } public function Overview(){ $sql="SELECT * FROM `tabel` LIMIT 1000"; return $database->Select($sql); } } |
Ik dacht dat dit wel netjes was en zou werken, helaas krijg ik nu de foutmelding:
Fatal error: Call to a member function Select() on a non-object in pad../classes/Music.php
De classes worden geladen met me functie __autoload bovenaan de index.php.
Iemand enig idee waarom dit niet goed gaat, en wat de beste oplossing is voor mijn problemen?