Starten met OOP.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Jasper DS

Jasper DS

01/12/2010 19:03:57
Quote Anchor link
Beste,

Ik heb al enkele tuts ivm OOP gevolgd maar het wil mij nog steeds niet lukken.
Ik heb al zitten zoeken en kijken naar oop scripts maar ik geraak er maar niet aan uit. Kan iemand mij misschien een klein scriptje tonen met OOP en zonder OOP dat net hetzelfde doet dan kan ik daar verder uit leren.

Alvast bedankt!

Mvg
 
PHP hulp

PHP hulp

22/11/2024 18:36:38
 

01/12/2010 19:08:17
Quote Anchor link
Sowieso is het belangrijk dat als je OOP wilt doen, dat je de achterliggende gedachte snapt. Kan jij dus uitleggen hoe dat zit? Zo ja, dan is het een kwestie van dat je het lastig vind om van gedachte in code te komen. Zo nee, dan is het handig om dat eerst uit te vinden.
 
Jasper DS

Jasper DS

01/12/2010 19:19:10
Quote Anchor link
Ik heb een tut gelezen over he je 'OOP moet denken', dus alle zelfstandige naamwoorden zijn objecten.
 
Niels K

Niels K

01/12/2010 19:20:32
Quote Anchor link
Lees anders de tut van blanche nog even? Daarna moet je in staat zijn om een klasse te schrijven. Misschien niet direct in perfect OO. Maar je bent dan i.i.g op weg.
 
Jasper DS

Jasper DS

01/12/2010 19:22:52
Quote Anchor link
heb hem al 3x gelezen, maar ik ben eigenlijk op zoek naar een script, gewoon in PHP geschreven en dan hetzelfde script in de OOP variant.

Mvg
 

01/12/2010 19:22:54
Quote Anchor link
PHP jasper op 01/12/2010 19:19:10:
Ik heb een tut gelezen over he je 'OOP moet denken', dus alle zelfstandige naamwoorden zijn objecten.


Naja, dat is wel een beetje kort door de bocht...
 
Niels K

Niels K

01/12/2010 19:29:42
Quote Anchor link
Quote:
een beetje kort door de bocht...


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
class Test
{
    private $var;
    public function __construct()
    {

        $this->var = 'test';
    }
    
    public function getVar( )
    {

        return $this->var;
    }
}


$class = new Test();
echo $class->getVar();
?>

'Normaal php'
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo 'test';
?>
 
Jasper DS

Jasper DS

01/12/2010 20:44:50
Quote Anchor link
en hoe vorm je dit dan?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<?php

    ###############################################
    #                                             #
    #            --- Query 2.0 ---                 #
    #                                             #
    #        Author: Jasper De Smet                  #
    #        Email: [email protected]        #
    #        Website: www.jasperdesmet.be          #
    #        Last edited: 12 November 2010         #
    #        Version: 2.0                           #
    #        thx: noppes @ PHP-hulp                  #
    #                                             #
    ###############################################
    
// zet dit bovenaan het script

// errors weergeven

ini_set('display_errors',1); // 1 == aan , 0 == uit
error_reporting(E_ALL | E_STRICT);

// sql debug
define('DEBUG_MODE',true);  // true == aan, false == uit

// functie voor sql debug

function showSQLError($sql,$error)
{

    echo  '<pre>Error: '.$error.'<br />'.$sql.'</pre>';
}



// start van het script
// zet dit waar je query moet

// de query
// let op sql-injectie -> mysql_real_escape_string()

$sql = "SELECT id
        FROM ...
        WHERE ... = '...'
        "
;

//  Check query        
if (($result = mysql_query($sql)) === false)
{

    // als de query fout is -> foutafhandeling
    echo 'Fout met database.';
    
    // geef de error via de functie (bovenaan script)
    if (DEBUG_MODE)
    {

       showSQLError($sql,mysql_error());
      
    }
}

else
{
    // De query is gelukt
}
?>
 
Jelmer -

Jelmer -

01/12/2010 20:55:41
Quote Anchor link
De lol van OOP is juist dat je veel meer semantiek, meer dingen die voor jou betekenis hebben in je code introduceert. Iets "dat dingen doet met sql en errors" kan je moeilijk omzetten in objecten. Je kan SQL en errors wel modelleren in objecten, maar dat helpt je niet naar een oplossing voor dat wat je probeert te maken.
 
Jasper DS

Jasper DS

01/12/2010 20:56:38
Quote Anchor link
hmm, ik snap het nut dus nog steeds niet.. xs
 
Jelmer -

Jelmer -

01/12/2010 20:58:45
Quote Anchor link
Ok, wat wil je maken?
 
Jasper DS

Jasper DS

01/12/2010 21:01:08
Quote Anchor link
Ik wil gewoon een beetje oop leren eigenlijk. Ik ben nu een soort van cms systeem aan het maken en iemand zei me dat ik dat beter met oop kon doen. dus toen dacht ik, ik zal me nog is in oop proberen te verdiepen.
 
Jelmer -

Jelmer -

01/12/2010 21:28:39
Quote Anchor link
Ok. Ik denk dat het makkelijker is om OOP vanuit zo'n "probleem" te leren dan vanuit het niets. Misschien is een gastenboek–dat is wat simpeler dan een cms–wel even leuk om te proberen. Als het een beetje meezit kan je dat in een dag doen en je kan het uitbreiden en opsplitsen in brokken die je ook voor je CMS zou kunnen hergebruiken.

Welke classes zou jij nu voor een gastenboek maken? Het hoeft niet heel ingewikkeld met routers en classes om formulieren te genereren etc, en ook mag je nog gewoon normale procedurele code gebruiken om je formulier af te handelen en je gastenboek weer te geven. Maar gewoon simpel een gastenboek waar je berichten uit een database kan tonen. Welke classes zou jij daar nu voor verzinnen? Ik kom er op minstens twee.
 
Jasper DS

Jasper DS

01/12/2010 21:46:02
Quote Anchor link
reactie en gebruiker denk ik.
 
Jelmer -

Jelmer -

01/12/2010 21:49:49
Quote Anchor link
Ok, waarom reactie en gebruiker? En wat zouden deze classes moeten kunnen?

(Ik dacht zelf meer aan reactie of bericht, en gastenboek. Bericht bevat het bericht, dwz de inhoud, datum en wie het geschreven heeft en gastenboek doet het opslaan en ophalen van berichten uit de database)
 
Jasper DS

Jasper DS

01/12/2010 21:51:35
Quote Anchor link
ik dacht reactie dus de inhoud, datum en wie het geschreven heeft en gebruiker ja ik weet niet, dat leek me logisch maar ik snap waarom je reactie of bericht, en gastenboek zou gebruiken
 
Jelmer -

Jelmer -

01/12/2010 21:57:07
Quote Anchor link
Ok, dan heb je dat dus al door. Dat is zo'n beetje het belangrijkste van OOP. Hoe zou je nu die classes bericht en gastenboek en eventueel gebruiker indelen? Welke functies/methods zou je ze geven, en welke argumenten nemen die functies en wat geven ze terug? Oftewel, hoe werken die classes, wat is hun interface? Schrijf ze eens uit zonder ze te implementeren, dus gewoon even zo. (en dan doe ik het even voor de class Topic om je niet op ideeën te brengen :P )
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php

class Topic
{
    public function id()
    {

        return 74690;
    }


    public function subject()
    {

        return "Starten met OOP.";
    }


    public function posts()
    {

        return array(
            new
Post('blaat'),
            new
Post('taart'),
            new
Post('paart'),
            new
Post('gaart'));
    }
}

?>
 
Jasper DS

Jasper DS

02/12/2010 19:29:37
Quote Anchor link
Het lukt me niet, ik zal binnen een half uur nog eens posten wat ik heb.


Toevoeging op 02/12/2010 19:47:42:

edit: niet verder geraakt dan dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
// errors weergeven
ini_set('display_errors',1); // 1 == aan , 0 == uit
error_reporting(E_ALL | E_STRICT);

class Reactie
{
    public function getReactie()
    {

        # Mysql query uit database
    }

    public function __construct($reactie)
    {

        # schrijf het bericht naar de database.
    }
    
}



?>
 
Pim -

Pim -

02/12/2010 22:03:08
Quote Anchor link
Maak onderscheid tussen de body van de reactie (wrs $reactie) en het reactie object, dit is verwarrend zo.

En verder doe je het niet goed zo. In het model van een gastenboek en reacties, zorgt het gastenboek voor de opslag en is de reactie zelf slechts een houder van de inhoud van de reactie. Ik hoop dat ik Jelmer's lesprogramma niet in de war schop, maar denk hieraan:

Vergeet de constructor heel even
Bedenk welke 'eigenschappen' een reactie kan hebben en zorg dat deze opgehaald en ingesteld kunnen worden.

En denk eraan dat het model (ongeveer) hetzelfde zou moeten werken mét of zonder 'persistence', de continuïteit door de reqeust heen, die je met je DB bereikt.

En mocht ik iets fout zeggen, verbeter me alsjeblieft :)
 
Jelmer -

Jelmer -

03/12/2010 00:26:15
Quote Anchor link
PHP jasper op 02/12/2010 19:29:37:
# Mysql query uit database
[...]
# schrijf het bericht naar de database.

Ik zei je nog expliciet niet over de implementatie na te denken :P Want dat is wat je nu normaal doet, en wat je gewend bent te doen. In mijn voorbeeld zie je ook niet hoe of waarvandaan ik die Post objecten bij Topic::posts haal, dat komt allemaal later, en dat is eigenlijk niet eens zo belangrijk.

Misschien een stapje makkelijker, ik noem een aantal taken die gedaan moeten worden binnen een gastenboek voordat het een gastenboek is. Je hebt twee classes, Gastenboek en Reactie. (je mag zoveel instanties van die classes maken als je zelf wilt)

Ok, de taken:
- naam auteur onthouden
- een reactie onthouden
- inhoud reactie onthouden
- reacties terugvinden
- een reactie verwijderen

Dit is echt te makkelijk, maar het gaat erom dat je begint te denken in dingen met verantwoordelijkheden in plaats van in stappen die dit daadwerkelijk doen.

Kan je nu de interfaces (de class zonder de inhoud, zoals ik hierboven met Topic deed) geven voor Gastenboek en Reactie?

En, geen idee of dat makkelijker is, kan je nu ongeveer schrijven hoe je Gastenboek de verschillende instanties van Reactie nu met elkaar zou laten praten? (als in roep je een method van je Gastenboek-instantie aan en geef je hem een Reactie instantie mee, of andersom, en hoe zou je de berichten uit het gastenboek tonen? Het enige wat je mag gebruiken is methods van Gastenboek en Reactie, echo, foreach en variabelen. De rest heb je niet nodig, of zijn op dit moment nog niet interessant.
 
Jasper DS

Jasper DS

23/12/2010 14:46:02
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?php
# TITEL: JASPER OEFENT OOP - GASTENBOEK @ phphulp : http://www.phphulp.nl/php/forum/topic/starten-met-oop/74690/

/*

    class GASTENBOEK
        - reacties ophalen
        - reacties deleten waar het id == $id
    
    class REACTIE
        - id van reactie ophalen
        - auteur van reactie ophalen
        - inhoud van reactie ophalen
        
    ONTBREEKT
        -naam auteur onthouden
        - een reactie onthouden

*/


        
class Gastenboek
{
    public function reacties()
    {

        return array(
            new
Post('reactie1'),
            new
Post('reactie2'),
            new
Post('reactie3'),
            new
Post('reactie4'));;
    }


    public function delete_reactie($id)
    {

        return "Starten met OOP.";
    }
}


class Reactie
{
    public function id()
    {

        return 1;
    }


    public function auteur()
    {

        return 'Jasper';
    }

        
    public function inhoud()
    {

       return 'Hallo, ik ben jasper, leuk gastenboek';
    }
}

?>


@ jelmer, is deze opzet beter?
Gewijzigd op 23/12/2010 14:47:02 door Jasper DS
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.