OOP while gebruiken
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.
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!
Klopt inderdaad, ik hoop dat dit ook werkt voor PHP4? Want op de server staat geen PHP5.
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?
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
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
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.
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.
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.
Echt top voor de snelle reactie, kan ik weer even verder.
'Moderator:
Gewijzigd op 01/01/1970 01:00:00 door Martin Meijer
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:
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?
Dat is hem nu juist. hij heef tmij dit voorbeeldje gegeven zonder die functions erbij :S
Offtopic: Mijn excuses voor het "bumpen", had er nog niet eerder van gehoord. :P Ik zal het in de gaten houden
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
Misschien kan ie dan ook nog even de functie erbij zetten, zou wel handig zijn.
Gewijzigd op 01/01/1970 01:00:00 door Jan geen
Dat zou dan een klasse User zijn, met al zijn eigenschappen.
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?
Jep. En als je het verder uitwerkt, kan je het zelfs zo maken dat je zo goed als geen queries meer hoeft te maken. Dan praat je eigenlijk alleen nog maar met een stel objecten, en dan doen de objecten de afhandeling met de database wel. En dan kom je bij het ActiveRecord pattern.





