[OOP] Telefoonboek

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Low Code Developer voor o.a. overheidsprojecten!

Bedrijfsomschrijving Wil jij ook behoren tot de specialist in Low Code? Dan zou ik zeker aanraden om verder te lezen. Deze organisatie is ooit opgericht door twee studenten en is inmiddels uitgegroeid tot een serieuze werkgever met een groot aanzien op Low Code projecten. De sfeer is echter niet veranderd, er heerst een informele sfeer met een open deuren beleid, en hierin mag de eigen bar natuurlijk niet ontbreken. Momenteel maakt deze organisatie een flinke groei door en hier kan jij natuurlijk niet bij ontbreken. Daarom ben ik op zoek naar Low Code Developers met een degelijke technische achtergrond. Kennis

Bekijk vacature »

(Junior) PHP Ontwikkelaar bij een retail bedrijf i

Bedrijfsomschrijving Ben jij een ervaren PHP ontwikkelaar met een passie voor retail en ICT? Wil jij werken in een team dat zich bezighoudt met het ontwikkelen van uitdagende applicaties voor een groot retailbedrijf in Delft? Dan zijn zij op zoek naar jou! Functieomschrijving Als PHP Ontwikkelaar werk je in een team aan de ontwikkeling van applicaties die door de gehele organisatie worden gebruikt. Je bent verantwoordelijk voor het ontwikkelen, testen en implementeren van deze applicaties. Je werkt hierbij nauw samen met andere ontwikkelaars, projectmanagers en stakeholders binnen de organisatie. Je taken bestaan onder andere uit: Ontwikkelen van nieuwe functionaliteiten en

Bekijk vacature »

.NET Developer

Functie omschrijving Net afgestudeerd en op zoek naar een leuke baan als developer? Zoek niet verder! Ik heb een functie beschikbaar als back-end developer, bij een leuk familiebedrijf. Je gaat werken met de Microsoft stack en de technieken C# en .NET. Verder maak je gebruik van MVC en Entity framework. SQL kent ook geen geheimen voor jou. Jouw verantwoordelijkheden: Nieuwe maatwerk software bouwen; API koppelingen bouwen; Applicaties en software optimaliseren; Back-end programmeren. Een erg uitdagende functie, met veel vrijheid. Je kan meerdere dagen thuis werken en als je op kantoor werkt wordt de lunch verzorgd. Heb je interesse, reageer dan

Bekijk vacature »

Front-end developer

Functie Jij komt te werken in een team van 5 developers. het product is continue in beweging. Nieuwe en bestaande klanten vragen om vaak nieuwe features. Hierin ben jij zeer belangrijk om te zorgen dat de functionaliteiten goed opgezet worden op technisch vlak. Designs krijg je aangeleverd van een externe partij zodat jij je primair kan focussen op de techniek! Je hebt daarbij alle vrijheid om je eigen creativiteit toe te passen en mee te denken over de gebruikte technieken. Het gezamenlijke doel is een product dat functioneel zeer gebruiksvriendelijk is en het bedrijfsproces van de gebruikers versneld en kwalitatief

Bekijk vacature »

Back-End Web Developer

Als Back-End Web Developer bij Coolblue zorg je ervoor dat onze webshops elke dag een beetje beter zijn. Wat doe je als Back-End Web Developer bij Coolblue? Als Back-End Web Developer werk je met andere development teams samen om onze webshop zo optimaal mogelijk te laten werken en onze klanten blij te maken. Als backend developer weet je de weg in PHP, kan je in Typescript een microservice op zetten of ben je bereid om dit te leren. Ook Web Backend Developer worden bij Coolblue? Lees hieronder of het bij je past. Dit vind je leuk om te doen PHP

Bekijk vacature »

Fullstack JavaScript developer (ReactJS, NodeJS, T

Functie Het team bestaat momenteel uit ruim 15 collega’s, waarvan ruim de helft in het ontwikkelteam werkzaam is. Er zijn gave plannen om het platform ook te gaan toepassen op bijv. vliegvelden, maar ook internationale groei zit in het verschiet en daarom zijn ze op zoek naar versterking. Als Fullstack JavaScript developer werk je nauw samen met 9 fullstack (Python en .NET) developers. Binnen het team ga jij je toespitsen op het creeren van de optimale toegankelijkheid en user experience. Om dit voor elkaar te krijgen zul je ontwerpen, programmeren, testen en implementeren. Het hele proces dus! Maar ook bijvoorbeeld

Bekijk vacature »

Fullstack developer

Functieomschrijving Heb jij kort geleden jouw HBO ICT diploma in ontvangst mogen nemen? Of ben je toe aan een andere uitdaging? Voor een erkende werkgever in de omgeving van Breda zijn wij op zoek naar een Fullstack developer. Kennis of ervaring met C# & SQL is een must! Je houdt je bezig met het ontwikkelen van nieuwe functionaliteiten; Je bent verantwoordelijk voor de beheer en ontwikkeling van de software; Je draagt bij aan de implementatie van aanpassingen, verbeteringen en aanvullingen in de C# based applicaties; Je test de software en ontwikkelt deze door; Je brengt de aanpassingssuggesties van klanten in

Bekijk vacature »

Back End Developer

As a Back End developer at KUBUS you will be developing the (web) application and services of BIMcollab. You have a focus on the back end of our software, for which we mainly work with C# and .NET. We use a full-stack approach, which means that in addition to the back-end, you will also help with other parts of the code. As a software company, KUBUS is in a unique position. We build our own products that are used by tens of thousands of users worldwide. Our company is just the right size: big enough to make a real impact

Bekijk vacature »

Software Developer C# .NET

Functie omschrijving Software Developer C# .NET gezocht voor een dynamische organisatie! Ben jij net afgestudeerd of toe aan een volgende stap in je maatschappelijke carrière? Lees dan snel verder! Wij zijn op zoek naar een Software Developer die klaar is voor een nieuwe uitdaging en die een organisatie in de regio Houten wil versterken. Je werkt in deze functie aan verschillende projecten en gaat vaak op bezoek bij klanten. In deze functie kun je een grote mate van uitdaging, diversiteit en verantwoordelijkheid verwachten. Bedrijfsprofiel Waar kom je te werken? Je komt te werken bij een organisatie dat gespecialiseerd is in

Bekijk vacature »

C# Developer

Dit ga je doen Je gaat aan de slag in het websites team of portals team waarin je je bezighoudt met concept & design, implementatie en ook een stukje bugfixing en onderhoud; Je werkt met je team volgens de Scrum werkwijze; Zo adviseer je ook de PO & Scrum Master over de technische architectuur, koppelingen en integratie met externe systemen en API’s; Je blijft op de hoogte van de laatste ontwikkelingen en trends op het gebied van C# / .NET en deelt deze kennis binnen de organisatie. Hier ga je werken Onze klant is een internationale organisatie gevestigd in de

Bekijk vacature »

Fullstack Software Developer

Functieomschrijving Voor een ambitieuze werkgever in regio Roosendaal zijn wij op zoek naar een Full Stack C#.NET Developer. Als software programmeur ben je verantwoordelijk voor het bouwen van webapplicaties, apps en dashboards voor de eigen IOT-oplossingen. Je werkt samen met andere developers en engineers om de sensoren in machines uit te lezen en deze data om te zetten in management informatie voor jullie klanten. Taken en verantwoordelijkheden: Verder ontwikkelen en onderhouden van webapplicaties, dashboards en apps voor de eigen IOT-oplossingen; Testen en goedkeuren van de software; Je gaat aan de slag met de volgende technologieën en frameworks: C#, JS frameworks,

Bekijk vacature »

Medior/Senior Software Developers gezocht in de Ra

Functie Op dit moment staan er posities open voor de volgende functies: Front-end, Back-End & Fullstack software developer. Als Front-End software developer werk je met JavaScript en de bijbehorende technologieën zoals TypeScript, Angular, React, Vue en Svelte. Als Back-End software developer ben je bezig in NodeJS en doe je dit met behulp van AWS, NoSQL, REST en GraphQL. Je krijgt leuke en uitdagende opdrachten met een gemiddelde duur van anderhalf jaar. Hier werk je in een team met andere IT’ers aan het ontwikkelen en verbeteren van software. Je wordt begeleid door een accountmanager die fungeert als jouw aanspreekpunt. Het team

Bekijk vacature »

Medior Java developer

Wat je gaat doen: Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun je eventueel ook andere ontwikkelaars begeleiden in het softwareontwikkelproces. Verder draag je positief bij aan de teamgeest binnen een projectteam en je kijkt verder dan je eigen rol. Je gaat software maken voor verschillende opdrachtgevers in jouw regio. Je bent een professional die het IT-vak serieus neemt en kwaliteit levert. Je leert snel vanwege je diepgaande

Bekijk vacature »

Java developer

Als Java Developer bij Sogeti ben je onderdeel van onze toonaangevende community die bestaat uit ruim 100 gepassioneerde Java professionals. In teamverband lever je mooie prestaties. Daarmee draag je aan bij de meerwaarde die wij leveren aan onze top-opdrachtgevers. Geen werkdag is hetzelfde! Je bent voortdurend bezig met het oplossen van allerlei complexe vraagstukken binnen bedrijfs kritische systemen voor onze klanten in regio Noordoost zoals DUO, ING, CJIB en Tendernet. Natuurlijk krijg jij de mogelijkheid je verder te certificeren in dit vakgebied. We organiseren regelmatig technische Meetups en doen veel aan kennisdeling. Sogetisten hebben plezier in hun werk en staan

Bekijk vacature »

Junior Developer Low-code

Dit ga je doen Low-code ontwikkeling van software voor landelijk bekende organisaties; Samenwerken in een team van 10 collega's; Opleveren van mooie eindproducten, middels de Agile methodiek; Direct contact met de eindklant over de gewenste oplossingen. Hier ga je werken Als startende IT-professional kom je te werken in de regio van Lelystad bij een organisatie die met toonaangevende klanten uit heel Nederland samen werkt. De producten en diensten van de organisatie bereiken miljoenen Nederlanders. Hierbij komt een grote hoeveelheid informatie kijken en deze moet discreet en veilig verwerkt worden. De processen die hierbij horen worden door het IT team vormgegeven.

Bekijk vacature »
Tim

Tim

03/02/2009 19:18:00
Quote Anchor link
Heey mensen,


Ik ben weer een beetje aan het proberen met OOP en vroeg me af of het volgende goed was? Opmerkingen en (opbouwende) kritiek zijn altijd welkom!

index.php
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<?php
require('class_Database.php');
require('class_Telefoonboek.php');
require('class_TelefoonboekRecord.php');

$telefoonboek = new Telefoonboek;
$message = $telefoonboek->initiate();
$records = $telefoonboek->getAllRecords();
?>


<HTML>

<HEAD>

<TITLE>Telefoonboek</TITLE>

</HEAD>

<BODY>

<?php

if(!empty($message)){
    echo $message . '<br><br>';
}



if(!$records){
    echo 'Er zijn geen nummers gevonden.';
}
else{
    ?>

    
    <TABLE>
     <TR>
      <TD STYLE='width: 200px; font-weight: bold;'>Name</TD>
      <TD STYLE='width: 200px; font-weight: bold;'>Number</TD>
     </TR>
    
     <?php
    
     for($i = 0; $i < count($records); $i++){
         echo '<TR>';
          echo '<TD>' . $records[$i]->getName() . '</TD>';
          echo '<TD>' . $records[$i]->getNumber() . '</TD>';
         echo '</TR>';
     }

    
     ?>

    
    </TABLE>
    
    <?php
}
?>


<br><br><br><br>

<FORM ACTION='' METHOD='POST'>
 <TABLE>
  <TR>
   <TD>Name:</TD>
   <TD><INPUT TYPE='text' NAME='name'></TD>
  </TR>
  <TR>
   <TD>Number:</TD>
   <TD><INPUT TYPE='text' NAME='number'></TD>
  </TR>
  <TR>
   <TD COLSPAN='2'><br><INPUT TYPE='submit' NAME='submit' VALUE='Voeg Toe'></TD>
  </TR>
 </TABLE>
</FORM>

</BODY>

</HTML>


class_Telefoonboek.php
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
<?php

class Telefoonboek {
    public function initiate() {
        if($_SERVER['REQUEST_METHOD'] == 'POST'){
            $check = $this->checkValues();
            
            if($check){
                if($this->addRecord()){
                    return 'Het nummer is succesvol toegevoegd.';
                }
else{
                    return 'Het nummer kon niet worden toegevoegd.';
                }
            }
else{
                return $check;
            }
        }
    }

    
    protected function checkValues() {
        $error = '';
        
        if(strlen($_POST['name']) < 4 || strlen($_POST['number'] > 200)){
            $error .= 'Controleer de ingevoerde naam.<br>';
        }

        
        if(!is_numeric($_POST['number']) || strlen($_POST['number']) < 4 || strlen($_POST['number']) > 25){
            $error .= 'Controleer het ingevoerde telefoonnummer.<br>';
        }

        
        if(!empty($error)){
            return $error;
        }

        
        return true;
    }

    
    protected function addRecord(){
        $database = new Database;
        $database->connect();
        
        $sql = 'INSERT INTO telefoonboek SET name="' . mysql_real_escape_string($_POST['name']) . '", number="' . mysql_real_escape_string($_POST['number']) . '"';
        $result = $database->makeRow($sql);
        
        $database->disconnect();
        
        if(!$result){
            return false;
        }

        
        return true;
    }

    
    public function getAllRecords() {
        $database = new Database;
        $database->connect();
        
        $sql = 'SELECT * FROM telefoonboek';
        $count = $database->countRows($sql);
        
        if($count > 0){
            $rows = $database->getRows($sql);
            
            for($i = 0; $i < count($rows); $i++){
                $record = new TelefoonboekRecord;
                $record->setId($rows[$i]['id']);
                $record->setName($rows[$i]['name']);
                $record->setNumber($rows[$i]['number']);
                
                $records[] = $record;
            }

            
            $database->disconnect();
            
            return $records;
        }
else{
            $database->disconnect();
            
            return false;
        }
    }

    
    public function getRecord($id) {
        $database = new Database;
        $database->connect();
        
        $sql = 'SELECT * FROM telefoonboek WHERE id="' . mysql_real_escape_string($id) . '"';
        $count = $database->countRows($sql);
        
        if($count == 1){
            $row = $database->getRow($sql);
            
            $record = new TelefoonboekRecord;
            $record->setId($row['id']);
            $record->setName($row['name']);
            $record->setNumber($row['number']);
            
            $database->disconnect();
            
            return $record;
        }
else{
            $database->disconnect();
            
            return false;
        }
    }
}


?>


class_TelefoonboekRecord.php
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
<?php

class TelefoonboekRecord {
    protected $id, $name, $number;
    
    function
__contruct() {
        $this->id = 0;
        $this->name = '';
        $this->number = '';
    }

    
    public function setId($id) {
        $this->id = $id;
    }

    
    public function getId() {
        return $this->id;
    }

    
    public function setName($name) {
        $this->name = $name;
    }

    
    public function getName() {
        return $this->name;
    }

    
    public function setNumber($number) {
        $this->number = $number;
    }

    
    public function getNumber() {
        return $this->number;
    }
}


?>


Groetjes!
Gewijzigd op 01/01/1970 01:00:00 door Tim
 
PHP hulp

PHP hulp

05/11/2024 20:39:24
 
PHP erik

PHP erik

03/02/2009 20:11:00
Quote Anchor link
1. Je ziet hier al direct dat iets niet klopt:
class Telefoonboek extends Database

Telefoonboek is namelijk geen database, maar een tabel. Dus deze extend klopt niet.

2. Je TelefoonboekRecord lijkt er al meer op, al is dat uiteraard gewoon een simpele wrapper

3. Alle $_POST-handelingen horen absoluut niet thuis in deze class. $_POST is iets specifieks van je applicatie, namelijk validatie, en hoort niet gemengd te worden met databasehandelingen. Je instantiate(), checkValues() en addRecord() kunnen dus echt niet op die manier.

Tip: bij addRecord() kun je een TelefoonboekRecord-object mee laten geven. Dus addRecord(TelefoonboekRecord $record). Dan zie je al dat je logisch bezig bent, want je definieert de waarden elders. Er zijn echter honderd manieren om databaseobjecten te maken. Ik zou zeggen Google ook eens op DAO (data access object).

4. Je getAllRecords() zou je statisch kunnen maken. Hij is namelijk niet echt afhankelijk van properties binnen je object en manipuleert je object ook niet. Maar dan moet je wel kijken hoe je je connectie meegeeft. Maar als je punt 1 hierboven leest dan zie je ook dat je eigenlijk niet moet extenden van Database.


Hier een voorbeeldje van in welke richting ik meer zou kijken:

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
<?php
abstract class DatabaseTable_Abstract
{
    protected $_db;

    public function __construct(Database $database)
    {

            $this->_db = $database;
    }
}


class Telefoonboek extends DatabaseTable_Abstract
{
     public function addRecord(TelefoonboekRecord $record)
     {

           // insert $record-object
     }
}

?>


Ik zou zelf een nog andere opzet gebruiken maar die gaat een beetje langs jouw aanpak heen terwijl jouw aanpak niet per se slechter is.

Ik zou in de TelefoonboekRecord-class al een insert-optie maken en het Telefoonboek-object houden om bijv. meerdere records op te vragen.

Daarnaast zou ik het database-object ophalen met een statische functie uit bijvoorbeeld een registry. Zoiets als $this->_db = Registry::get('db'); Dan hoef je dit niet steeds mee te geven. Je kunt dan ook makkelijker statische functies gebruiken.

Voor alle $_POST-dingen zul je aparte validatieobjecten "moeten" maken. Deze objecten zouden wel gebruik kunnen maken van bijvoorbeeld TelefoonboekRecord om bijvoorbeeld te zien welke velden worden verwacht.


Oke veel commentaar maar ik vind het zeker niet slecht.


Edit:
Oh, oh, en errors return je niet in een lijst, daar gooi je Exceptions voor. Bij validatie heb je echter goed gezien dat je misschien een errorlijst wil. Maar ik zou niet ervoor kiezen om één functie óf true óf een errorlist te laten returnen. Ik zou eerder een ->isValid() method maken, en bij false, een getErrors() method. Maar dan dus wel ergens in een validatieobject. Zie ook voor de grap eens een pagina uit een tutorial die ik ooit heb geschreven: http://phphulp.nl/php/tutorials/8/632/1667/
Gewijzigd op 01/01/1970 01:00:00 door PHP erik
 
Tim

Tim

03/02/2009 20:19:00
Quote Anchor link
Bedankt voor je tips!

Dat extenden van de database was een foutje uit een eerdere versie. Zoals je verder ziet in de methods gebruikte ik deze extend in principe niet. Hij is eruit en ik had hem er al 'uitgedacht'.

De rest zal ik meenemen in een volgende versie!
 
PHP erik

PHP erik

03/02/2009 20:27:00
Quote Anchor link
Je bent goed bezig. Misschien nog iets meer het gevoel krijgen van wat je object moet voorstellen en wat je er in implementeert. Je maakt het jezelf al moeilijk als je een object "Telefoonboek" noemt. Dit kan namelijk echt vanalles zijn. In werkelijkheid is het geen Telefoonboek, maar een representatie van je telefoonboek-databasetabel. Stel je had 'm TelefoonboekTabel genoemd (misschien geen mooie naam), dan had je wel sneller voor jezelf bedacht dat je niet $_POST-waarden gaat valideren binnen je Tabel-object. Een tabel heeft namelijk eigenlijk maar 4 handelingen: select, update, insert, delete. Er zit geen validate()-functie in. Dat zou je uitspreken als Tabel::validate(). Dat impliceert direct al dat je een tabel aan het valideren bent, en dat doe je niet. Je valideert data van buitenaf.

Bekijk ook eens wat frameworks zoals Zend, symfony en CakePHP om te zien wat voor standaardobjecten zij definiëren. Het is vaak al leerzaam te weten waar men aparte objecten voor gebruikt.

Good luck.

edit: overigens kun je dit object absoluut gewoon Telefoonboek noemen hoor, als je maar altijd in je achterhoofd houdt wat "Telefoonboek" dan precies betekent.
Gewijzigd op 01/01/1970 01:00:00 door PHP erik
 
Tim

Tim

03/02/2009 20:40:00
Quote Anchor link
Thanks, ik ga er mee aan de slag!
 



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.