OOP while gebruiken
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.
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php foreach(User::fetchAll() as $user): ?>
<li>
<h2><?=$user->firstName?> <?=$user->lastName?></h2>
<span><?=$user->role?></span><a class="editLink" href="<?=$user->createEditLink()?>">[edit]</a>
<p>
<?=$user->about;?>
</p>
</li>
<?php endforeach; ?>
<li>
<h2><?=$user->firstName?> <?=$user->lastName?></h2>
<span><?=$user->role?></span><a class="editLink" href="<?=$user->createEditLink()?>">[edit]</a>
<p>
<?=$user->about;?>
</p>
</li>
<?php endforeach; ?>
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 ken het nog niet zolang OOP, maar het is gewoon erg leuk om te doen en te zien idd :P.
En ben nu bezig een Formule1 Manager spel te maken in OOP.
Ik lees net in de andere topic ([OOP]Wat is nu......) , dat je het stukje gegeven hebt alleen voor PHP5 werkt helaas.
Zou het anders op te lossen zijn voor PHP4, of zou ik dan echt "tijdelijk" hiervoor terug moeten gaan naar de gewone WHILE?
Gewijzigd op 01/01/1970 01:00:00 door Martin Meijer
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?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){
?>
$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.
Echt top voor de snelle reactie, kan ik weer even verder.
Moderator edit::
Gewijzigd op 01/01/1970 01:00:00 door Martin Meijer
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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?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
?>
/////////////// 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
?>
hoe ziet die initializeWithData() er precies uit?
Offtopic: Mijn excuses voor het "bumpen", had er nog niet eerder van gehoord. :P Ik zal het in de gaten houden
Gewijzigd op 01/01/1970 01:00:00 door Martin Meijer
Gewijzigd op 01/01/1970 01:00:00 door Jan geen
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?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;
}
}
?>
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;
}
}
?>
dus dan word je klasse een soort afspiegeling van je database, met als instantievariabelen de kolommen van je database?