|
9. Classes.
9.1 Wat is een class en wat zijn de voordelen van het gebruik van classes.
Een class is een verzameling van variabelen (attributes) en functies(methods). Samen
vormen ze een de omschrijving en het functioneren van een object.
Het grootste voordeel van het werken met classes is dat je de code overzichtelijk
bij elkaar kan houden. Zeer zeker als je code voor diverse projecten wilt gebruiken
kan je veel tijd besparen door goed gedefineerde classes. Je zou bijvoorbeeld een set
classes kunnen maken waarbij je wrappers voor het bewerken van een database schrijft.
Als je dit goed aanpakt kan je die classes in ieder nieuw project hergebruiken.
9.2 Hoe defineer je een class.
Het aanmaken van een class is zeer simpel. Je maakt een nieuw bestand aan met daarin
de attributes en de methods:
<code> <?php
class mysql_actions {
var $host;
var $db;
var $username;
var $password;
function connect(){
/*
Binnen deze functie de connectie naar de database.
*/
}
}
?>
</code>
We hebben nu een class met 4 attributes en 1 method. Sla het bestandje op
als mysql_class.php voor later gebruik.
9.3 Hoe roep je een class en zijn attributes en/of methods aan?
Classes zet je bij goed gebruik altijd in aparte bestanden. We moeten ze dus eerst via
require includen in het bestand waarin we de class willen gebruiken. Daarna moeten we
een nieuwe instance maken.
<code> <?php
/*
Include het bestand en maak een nieuwe instance aan.
*/
include ("path/mysql_class.php");
$db = new mysql_actions;
?>
</code>
Op zich hebben we nu niets anders gedaan dan het aan maken van een nieuw object
dat de beschikking heeft over 4 attributes en 1 method, te weten:
- $host voor de server waar de database op staat.
- $db voor de database die we willen gebruiken.
- $username voor de inlognaam.
- $password voor het wachtwoord.
- connect() als method voor het eigenlijke connecten naar de database.
Binnen een pagina kan je natuurlijk ook meerdere instances aanmaken waarbij
je bijvoorbeeld een connectie maakt naar diverse databases.
Als je de attributes wil aanroepen die je dit door de instance naam te gebruiken
en een verwijzing te maken naar het attribute. Daarbij moet je niet het dollarteken
gebruiken:
<code> <?php
include ("path/class.php");
$db = new mysql_actions;
$db->host = "localhost";
$db->db = "test";
$db->username = "guppie";
$db->password = "ikke";
?>
</code>
We hebben nu de diverse waardes in de attributes van de class gezet. Je kan ook de waardes
van de attributes uitlezen. Dat gaat als volgt:
<code> <?php
include ("path/class.php");
$db = new mysql_actions;
..............
$host_value_db_instance = $db->host;
?>
</code>
De $host_value_db_instance bevat dan de waarde van de hostname die bij de instance db in
gebruik is.
Als je echt zinnig gebruik wilt maken van de class moet je natuurlijk de method aanpassen.
Dat doe je door binnen de method de attributes uit te lezen en daarmee de connectie tot stand te
brengen. Attributes binnen een class roep je aan met $this:
<code> <?php
class mysql_actions {
var $host;
var $db;
var $username;
var $password;
function connect(){
$ip = $this->host;
$db = $this->db;
$user = $this->username;
$pass = $this->password;
mysql_connect( $ip, $user, $pass );
mysql_select_db( $db ) or die ("Tjee, geen connectie mogelijk");
}
}
?>
</code>
Als laatste hoeven we dan alleen de method connect aan te roepen vanuit het bestand
waar we de instance van de class hebben aangemaakt. Het zal er dan als volgt uit zien:
<code> <?php
include ("path/class.php");
$db = new mysql_actions;
$db->host = "localhost";
$db->db = "test";
$db->username = "guppie";
$db->password = "ikke";
$db->connect();
?>
</code>
Een mooi voorbeeld voor een class is de mysql_to_rdf class die je kan vinden
op: mysql_to_rdf.phps
Het gaat hierbij om een class die een rdf bestand (Netscape channel file)
kan aanmaken. Het plukt een X tal items uit een database die het kan wegschrijven
in dat rdf bestand.
9.4 Attributes van een class uitlezen.
Met de nieuwe class functies zijn er nog meer mogelijkheden. Zo is er sinds kort (PHP 4.0.0 stable) de
get_class_vars functie. Als je die loslaat op een class krijg je een array met alle attributes van een class:
<code> <?php
$vars = get_class_vars(classname);
while (list($key, $val) = each($vars)) {
echo $key . "<br>\n";
}
?>
</code>
9.5 Methods van een class uitlezen.
Net zoals je de attributes kan uitlezen kan je ook de methods van een class te weten komen:
<code> <?php
$vars = get_class_methods(classname);
while (list($key, $val) = each($vars)) {
echo $val . "<br>\n";
}
?>
</code>
9.6 Kijken welke classes er aanwezig zijn.
Nu zal je in de meeste gevallen gewoon in de classfile kunnen kijken om daar de attributes te bestuderen maar
nog dit jaar zal Zend met een compiler op de markt komen waardoor al snel de eerste gecompileerde classes
zullen verschijnen. In zo'n geval is het handig om de attributes op te vragen. Nadeel is wel dat attributes in
php classes altijd public zijn. Talen zoals Java hebben binnen een class zowel private als public attributes.
Om de classes op te vragen waarvan een instance is aangemaakt gebruik je de functie get_declared_classes:
<code> <?php
$vars = get_declared_classes();
while (list($key, $val) = each($vars)) {
echo $val . "<br>\n";
}
?>
</code>
|