Ik kan net OOP en zou ik wel eens willen weten hoe ik bijvoorbeeld een ledenlijst in OOP gemaakt zou kunnen worden.
De reden waarom ik dit vraag, is omdat je een ledenlijst (of iets anders) met een WHILE toont (Via achterelkaar scripten), maar ik ben er nog niet echt uit hoe ik dit in een class zou kunnen verwerken.
Dus die class zou dus alle leden moeten laten zien als je de CLASS aanroept.
Maar dat zou alleen het 'template' zijn. Waar het voor jouw wss interessant is is binnen User::fetchAll. Die doet je query, while-lus met fetch_assoc() en maakt voor iedere user een instantie van User aan.
Jep, het is inderdaad minder efficiënt dan een gewone while-lus (omdat je immers al die objecten aanmaakt) maar het ziet er wel hartstikke geil uit!
Ik weet zo niet of deze notatie: Class::method() werkt in PHP4. Als alternatief zou je een soort dummy-instantie kunnen maken, en daarvan method() aanroepen, of method() gewoon als functie definiëren. Dat werkt beiden sowieso in PHP4
<?php
$instance = new Class();
foreach($instance->fetchAll() as $result) {
echo $result->fullName();
}
function fetchAllUsers()
{
mysqlenz...
$result = array();
while($row = mysql_fetch_assoc($sql...)) {
$user = new User();
$user->initializeWithData($row);
$result[] = $user;
}
return $user;
}
foreach(fetchAllUsers() as $user){ …
?>
In dat stukje dat PHP5 only was geef ik een instantie van een klasse terug en gebruik ik die direct weer. Volgens mij werkt dat niet in PHP4. In PHP5 zou je dit namelijk kunnen doen waneer method() 'return $this' bevat. Wordt ook wel 'chaining' genoemd.
Ok thnx, ik ga hier even mee aan de slag, als ik vragen heb hierover dan zal ik ze hier wel even stellen!
Echt top voor de snelle reactie, kan ik weer even verder.
Moderator edit:
Bumpen:
Twee of meer keer achter elkaar in je eigen topic posten heet bumpen.
Bumpen is pas na 24 uur toegestaan en kan een reden zijn voor de admins en moderators om een topic te sluiten. Gebruik indien nodig de knop om je tekst aan te passen.
Volgens mij klopt het niet helemaal wat je net gegeven hebt, als ik dit overneem zo dan krijg ik een aantal errors en die begint dan over:
Fatal error: Cannot instantiate non-existent class: User in /home/account009/domains/formule1-manager.eu/public_html/modules/algemeen/transfer/classes/show_coureurs_class.php on line 13
En de: $user->initializeWithData($row) (waar komt de initializeWithData() weg?)
Ik heb het nu aangepast eerst om de Coureurs uit de database te halen, zonder succes, code is:
<?PHP
/////////////// CLASS OM DIVERSE TE TONEN
class show_divers { // Show diverse uit de database (coureurs, banden, chassis, motor, pitbabe)
var $soort;
var $team;
var $coureur;
function show_coureurs()
{
$cl_sql_001 = mysql_query("SELECT * FROM drivers") or die(mysql_error());
$result = array();
while($row = mysql_fetch_assoc($cl_sql_001)) {
$driver = new driver();
$driver->initializeWithData($row);
$result[] = $driver;
}
return $driver;
}
}/////////////// EINDE CLASS OM DIVERSE TE TONEN
?>
Dat zou dan een klasse User zijn, met al zijn eigenschappen.
<?php
class User {
public $id;
public $firstName;
public $lastName;
public function initializeWithResult($result)
{
/* Op deze manier kan je je eigen tabelnamen aanhouden,
* en zijn ze niet direct verbonden aan de namen van je
* properties van je klasse.
*/
$this->id = $result['user_id'];
$this->firstName = $result['user_first_name'];
$this->lastName = $result['user_last_name'];
}
public function fullName()
{
return $this->firstName . ' ' . $this->lastName;
}
}
?>