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.

<?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; ?>

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 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.

<?php
    $instance->method()->method()->method()->method()->enz.
?>
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
?>
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
Misschien kan ie dan ook nog even de functie erbij zetten, zou wel handig zijn.
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;
        }
    }
?>

dus dan word je klasse een soort afspiegeling van je database, met als instantievariabelen de kolommen van je database?

Reageren