Gebruiken van classes
Niet één tutorial die ik gelezen heb verteld mij het volgende over classes:
- doet men alle classes in 1 document en include deze waar classes gedeclareerd worden?
- doet men elke class in een apart document en include deze waar de functie nodig is?
- Moet er überhaupt wel 'geïnclude' worden?
Ik trouwens niet wachten tot ik een database class heb :-D. Al die regels code, niet te doen!
Classes moeten uiteraard geincludeerd worden, en geïnitialiseerd met $foo = new bar(); PHP kan zelf niet ruiken welke classes er anders nodig zijn.
Gewijzigd op 05/12/2011 13:18:08 door - Ariën -
En ja, elk bestand moet geïncluded. Het best is om bovenaan je script alle nodig classes te laden. Classes die je niet gebruikt moeten natuurlijk niet ingeladen worden.
Wat ik vaak doe is gebruik maken van de __autoload functie. Deze wordt aangeroepen als je een class initialiseert. Voorbeeldje:
Het gebruik van require_once of include_once is hier het best. Zo wordt hetzelfde bestand niet vaker geïncluded.
Het gebruik van de autoload functie, zoals Wouter zegt, is aan te raden. Je hoeft dan niet telkens een class te includen.
Wouter J op 05/12/2011 13:30:57:
Wat ik vaak doe is gebruik maken van de __autoload functie. Deze wordt aangeroepen als je een class initialiseert. Voorbeeldje:
Het gebruik van require_once of include_once is hier het best. Zo wordt hetzelfde bestand niet vaker geïncluded.
Het gebruik van require_once of include_once is hier het best. Zo wordt hetzelfde bestand niet vaker geïncluded.
Deze wordt ook aangeroepen als je alleen al de class probeert te bereiken.
_autoload moet aanstaan op je server toch?
Matthijs DeM op 05/12/2011 14:28:59:
Top! Allemaal bedankt!
_autoload moet aanstaan op je server toch?
_autoload moet aanstaan op je server toch?
http://php.net/manual/en/language.oop5.autoload.php
php.versie >= 5.0
Fatal error: Call to undefined function ShortTxt() in C:\wamp\www\head.php on line 36
In het begin van het document
In het document
Code (php)
1
2
3
4
2
3
4
<?php
// een de nodige code ervoor; Database connectie en query
ShortTxt($tekst, 20);
?>
// een de nodige code ervoor; Database connectie en query
ShortTxt($tekst, 20);
?>
Gewijzigd op 05/12/2011 18:29:31 door Matthijs M
OOP beginnershandleiding te lezen.
En de autoload functie wordt niet aangeroepen als je een functie aan roept, alleen met een class.
HEb je de ShortTxt() functie wel aangemaakt, of is dat een class? Ik raad je in elk geval aan om even de En de autoload functie wordt niet aangeroepen als je een functie aan roept, alleen met een class.
ja die functie is aangemaakt. Heeft altijd gewerkt, met een een include.
autoload is voor classes.. niet functies
Code (php)
om de functie uit voeren
klaar ;)
Ok bedankt. Die beginnershandleiding ga ik ook nog doornemen.
Fuzzie - op 05/12/2011 19:27:42:
dus met andere woorden je class zal er ongeveer zo uit zien
om de functie uit voeren
klaar ;)
Code (php)
om de functie uit voeren
klaar ;)
Je kunt die methode beter statisch maken.
echo Text::ShortTxt("blaaaat", 2);
Error:
Code (php)
1
Fatal error: Call to a member function num_rows() on a non-object in /var/www/vhosts/*/httpdocs/Developement/dbclass/index.php on line 22
__autoload poging:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
function __autoload( $name )
{
require_once 'classes/'.$name.'.php';
}
# regel 22
echo $db->num_rows( 'SELECT * FROM artikels' );
destruct( 'db' );
?>
function __autoload( $name )
{
require_once 'classes/'.$name.'.php';
}
# regel 22
echo $db->num_rows( 'SELECT * FROM artikels' );
destruct( 'db' );
?>
Hier de class in het mapjes "classes".
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
<?php
# Made by Mitch Vroege 2005
# Versie 0.6.2
# Class database
class database
{
# Database connectie variabele
var $db;
# Constructor
function database( $user, $pass, $database, $error = 'MySQL database niet bereikbaar!', $host = 'localhost' )
{
# Connectie leggen
$this->db = mysql_connect( $host, $user, $pass );
# Kijken of de connectie gelukt is, en of de database geselecteerd kon worden
if( !$this->db || !mysql_select_db( $database, $this->db ) )
die( $error );
}
# Query resultaat variabele
var $res;
# Functie die mysql_num_rows teruggeeft
function num_rows( $sql = NULL )
{
# Kijken of er een query meegegeven is, zo ja uitvoeren
if( $sql != NULL )
$this->run_query( $sql );
# Mysql_num_rows uitspugen
return mysql_num_rows( $this->res );
}
# Functie die mysql_fetch_array teruggeeft
function get_array( $sql = NULL, $refetch = false )
{
# Kijken of er een query meegegeven is, zo ja uitvoeren
if( $sql != NULL )
$this->run_query( $sql );
# Kijken of refetch is meegegeven
if( $refetch == true )
mysql_data_seek( $this->res, 0 );
# Loopje door alle resultaten
while( $row = mysql_fetch_array( $this->res ) )
$rows[] = $row;
# Array met rows uitspugen
return $rows;
}
# Functie die mysql_insert_id teruggeeft
function insert_id( $sql = NULL )
{
# Kijken of er een query meegegeven is, zo ja uitvoeren
if( $sql != NULL )
$this->run_query( $sql );
# Mysql_insert_id uitspugen
return mysql_insert_id( $this->db );
}
# Functie die mysql_affected_rows teruggeeft
function affected_rows( $sql = NULL )
{
# Kijken of er een query meegegeven is, zo ja uitvoeren
if( $sql != NULL )
$this->run_query( $sql );
# Mysql_affected_rows uitspugen
return mysql_affected_rows( $this->db );
}
# Functie die kijkt of $table in $database bestaat, zoja 'true', zo nee, 'false'
function find_table( $table, $database )
{
# Tabellen opvragen
$this->res = mysql_list_tables( $database, $this->db );
# Tabellen in een array proppen
$data = $this->get_array( );
# Return true of false
return in_array( $table, $data );
}
# Functie die de query uitvoert
function run_query( $sql )
{
# Query uitvoeren en het resultaat wegschrijven in de $res var
$this->res = mysql_query( $sql, $this->db );
# Kijken of het een geldige query is
if( !$this->res )
die( 'De opgegeven query is onjuist!' );
}
# Functie die de verbinding sluit & $res leegt
function database_close( )
{
# $res legen
if( !@mysql_free_result( $this->res ) )
unset( $this->res );
# Verbinding sluiten
mysql_close( $this->db );
}
}
# Class database destructor
function destruct( $name )
{
# Referentie naar object $name meegeven aan $db
$db = &$GLOBALS[$name];
# Database afsluiten
$db->database_close( );
# Object verwijderen
unset( $GLOBALS[$name] );
}
# Database configuratie
$db = new database( '*', '*', '*' );
?>
# Made by Mitch Vroege 2005
# Versie 0.6.2
# Class database
class database
{
# Database connectie variabele
var $db;
# Constructor
function database( $user, $pass, $database, $error = 'MySQL database niet bereikbaar!', $host = 'localhost' )
{
# Connectie leggen
$this->db = mysql_connect( $host, $user, $pass );
# Kijken of de connectie gelukt is, en of de database geselecteerd kon worden
if( !$this->db || !mysql_select_db( $database, $this->db ) )
die( $error );
}
# Query resultaat variabele
var $res;
# Functie die mysql_num_rows teruggeeft
function num_rows( $sql = NULL )
{
# Kijken of er een query meegegeven is, zo ja uitvoeren
if( $sql != NULL )
$this->run_query( $sql );
# Mysql_num_rows uitspugen
return mysql_num_rows( $this->res );
}
# Functie die mysql_fetch_array teruggeeft
function get_array( $sql = NULL, $refetch = false )
{
# Kijken of er een query meegegeven is, zo ja uitvoeren
if( $sql != NULL )
$this->run_query( $sql );
# Kijken of refetch is meegegeven
if( $refetch == true )
mysql_data_seek( $this->res, 0 );
# Loopje door alle resultaten
while( $row = mysql_fetch_array( $this->res ) )
$rows[] = $row;
# Array met rows uitspugen
return $rows;
}
# Functie die mysql_insert_id teruggeeft
function insert_id( $sql = NULL )
{
# Kijken of er een query meegegeven is, zo ja uitvoeren
if( $sql != NULL )
$this->run_query( $sql );
# Mysql_insert_id uitspugen
return mysql_insert_id( $this->db );
}
# Functie die mysql_affected_rows teruggeeft
function affected_rows( $sql = NULL )
{
# Kijken of er een query meegegeven is, zo ja uitvoeren
if( $sql != NULL )
$this->run_query( $sql );
# Mysql_affected_rows uitspugen
return mysql_affected_rows( $this->db );
}
# Functie die kijkt of $table in $database bestaat, zoja 'true', zo nee, 'false'
function find_table( $table, $database )
{
# Tabellen opvragen
$this->res = mysql_list_tables( $database, $this->db );
# Tabellen in een array proppen
$data = $this->get_array( );
# Return true of false
return in_array( $table, $data );
}
# Functie die de query uitvoert
function run_query( $sql )
{
# Query uitvoeren en het resultaat wegschrijven in de $res var
$this->res = mysql_query( $sql, $this->db );
# Kijken of het een geldige query is
if( !$this->res )
die( 'De opgegeven query is onjuist!' );
}
# Functie die de verbinding sluit & $res leegt
function database_close( )
{
# $res legen
if( !@mysql_free_result( $this->res ) )
unset( $this->res );
# Verbinding sluiten
mysql_close( $this->db );
}
}
# Class database destructor
function destruct( $name )
{
# Referentie naar object $name meegeven aan $db
$db = &$GLOBALS[$name];
# Database afsluiten
$db->database_close( );
# Object verwijderen
unset( $GLOBALS[$name] );
}
# Database configuratie
$db = new database( '*', '*', '*' );
?>
Gewijzigd op 12/12/2011 17:44:31 door Matthijs M
Vervolgens zet je bovenaan een nieuwe pagina de autoload functie en daaronder maak je een nieuwe instance van database aan.
Opgelost, bedankt Wouter!