OOP

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Front-end developer (React)

Functie Het frontend team bestaat momenteel uit 4 dedicated front-enders en is hard aan het groeien! Ook werken er diverse designers waar je veel mee schakelt. Samen leveren jullie een essentiële bijdrage aan de applicaties die ze voor hun klanten realiseren, jij bent hierin de schakel tussen de eindgebruiker en de slimme backend. Je werkt in het frontend team samen met de backend teams en product owners om te zorgen dat onze applicaties een fijne gebruikerservaring opleveren. Ze werken o.a. met: React, Atomic design, Styled components, JavaScript / TypeScript, NPM, Webpack Blade templates, HTML, SCSS, Git flow. Eisen • HBO

Bekijk vacature »

Senior/Lead Python developer

Functie Samen met je team, bestaande uit een senior, 2 mediors en één junior ontwikkelaar ga je op een Agile-gebaseerde aanpak werken aan hun software. Je hebt oog voor kwaliteit, risico’s en klantbelang. Communicatie met je collega’s en waar nodig ook met klanten speelt een belangrijke rol in het bereiken van een succesvol resultaat. Als persoon ben je slim, krijg je dingen voor elkaar en ga je resultaatgericht te werk. Binnen het development team is er veel zelfstandigheid, los van de stand-up (10:00 uur) en zo nu en dan pair-programming sessies. Technieken die zij gebruiken zijn o.a. Python, Django, MySQL,

Bekijk vacature »

PHP ontwikkelaar

Functie Met een complex en uitgebreid e-commerce platform, een eigen PIM-systeem en eigen scan applicatie – krijg jij dagelijks te zien hoe jouw werk gebruikt wordt door miljoenen gebruikers. En we staan qua development pas in de startblokken, aangezien er nog meerdere projecten op de plank liggen te wachten! Ons huidige development team bestaat uit 8 programmeurs. Er wordt dagelijks gereflecteerd op geschreven code, Scrum taken en kennisdelen onderling is een must. Onze voertaal binnen ons team is Engels, dit omdat wij twee internationale collega’s hebben. Ons huidige “IT Landschap” bestaat voornamelijk uit allerlei losse onderdelen die individueel, maar ook

Bekijk vacature »

Senior .NET Ontwikkelaar

In het kort Als Senior .NET ontwikkelaar ga je binnen onze business unit Transport en Logistiek aan de slag met complexe maatwerk software voor bedrijf kritische systemen binnen de technische automatisering. Denk bijvoorbeeld een IoT-oplossing voor de logistieke sector waarbij we van ruim 200.000 machines de telemetrie en events verwerken. We zijn actief in de distributielogistiek, havenlogistiek (denk aan ECT) en productielogistiek. Naast C# en .NET Core maken we ook gebruik van Azure technologie. En als trotse Microsoft Gold Partner leren we graag van en met jou. Wil jij jezelf blijven ontwikkelen binnen de technische automatisering met .NET, dan gaan

Bekijk vacature »

Senior Fullstack developer wanted! (C#, Java, Angu

Functie Under the guidance of 3 account managers, one of whom will be your point of contact within your expertise, you will start working for various clients. He or she will help you find a suitable and challenging assignment. Naturally, they will take your situation, experience and (technical) ambitions into account. The assignments last one to two years on average. This allows you to really commit to a project and make an impact as a consultant. Besides the assignment, you will regularly meet your colleagues from the IT department to share knowledge or discuss new trends, for example. Master classes

Bekijk vacature »

Softwareontwikkelaar Cleopatra

Functieomschrijving: De directie Verkeer en Openbare ruimte van de gemeente Amsterdam beschikt over een softwareapplicatie, "Cleopatra", waarmee geautomatiseerde handhaving plaatsvindt (op basis van kentekenherkenning) van bepaalde gebieden waarin toegangseisen worden gesteld aan het verkeer. Voorbeelden ervan zijn de milieuzones, de zone zwaar verkeer, handhaving van bromen snorfietser op het fietspad en autoluwe gebieden. Voor de doorontwikkeling en uitbreiding ervan zijn gespecialiseerde softwareontwikkelaars nodig die helpen bij het programmeren van de handhavingsmodules voor nieuwe gebieden en het verbeteren en bijwerken van de bestaande onderdelen van de softwareapplicatie.De opdracht bestaat uit: het programmeren van de diverse modules;het tijdens demo's tonen van de

Bekijk vacature »

.net developer

Hoi! Wij zijn auto.nl en wij verkopen auto's online. je bestelt bij ons een auto net zo makkelijk als een spijkerbroek. En bevalt ie niet? Dan stuur je 'm gewoon weer terug. En dat we dat goed doen bewijst onze hoge klanttevredenheid van een 9,3. Nu maken we de volgende stap bij auto.nl. We starten met fysieke winkels. Online zoeken, offline bekijken. Maar nog altijd, geen gedoe! Gewoon eerlijk, transparant en zonder zorgen een auto kopen.. Maar om dat waar te blijven maken en nóg beter te worden, zoeken we uitbreiding van ons development team. Wat ga je precies doen?

Bekijk vacature »

Embedded Software Developer

Functie omschrijving Voor een mooi softwarebedrijf in omgeving Ridderkerk zijn wij op zoek naar een Embedded Software developer. Ben jij enthousiast en een echte team player? Lees dan snel of dit iets voor jou is! Binnen deze rol houdt jij je bezig met alle werkzaamheden die nodig zijn om een functionaliteit te bouwen. Denk aan ontwerpen, architectuur, programmeren en algoritmes. Je voert test en validatie werkzaamheden uit bij de implementatie bij de klant. Ben jij een Embedded Software Developer die affiniteit heeft met de allernieuwste technieken? Laat dan snel wat van je horen! Bedrijfsprofiel Onze opdrachtgever bestaat uit een groot

Bekijk vacature »

Senior .NET developer

Klaar voor een nieuwe uitdaging? Welke technologieën gaan schuil achter de dagelijkse energievoorziening? Als senior .NET developer bij Kenter maak jij samen met je team het verschil, zowel voor de interne organisatie als voor eindklanten. Samen bouwen jullie aan innovatieve dienstverlening met behulp van de nieuwste technologieën en tools. Het is een functie met veel vrijheid, goede arbeidsvoorwaarden én je draagt jouw steentje bij aan de energietransitie. Klinkt dit als iets voor jou? Lees dan verder of solliciteer direct! Wat ga je doen als senior .NET developer? Als senior .NET developer bij Kenter (onderdeel van Alliander) ben je van onschatbare

Bekijk vacature »

Senior .NET Developer I goed salaris en deels thui

Bedrijfsomschrijving Mijn opdrachtgever is al ruim 20 jaar een gevestigde naam in de wereld van software ontwikkeling, met drie kantoren in de Randstad, waaronder Alphen aan den Rijn. Zij richten zich op het bouwen van IT-oplossingen die ervoor zorgen dat de productiviteit van klanten te allen tijden optimaal is. Hiervoor neemt jouw nieuwe werkgever het volledige ontwikkelproces tot haar rekening; van het eerste gesprek om de klantwensen in kaart te brengen, tot aan het uiteindelijke onderhoud van de opgeleverde oplossing. In totaal werken er inmiddels bijna 200 gemotiveerde IT-ers binnen deze organisatie. De gemiddelde leeftijd ligt rond de 35. Het

Bekijk vacature »

Back-end programmeur

Functieomschrijving Heb jij kort geleden jouw HBO ICT diploma in ontvangst mogen nemen? Of ben je toe aan een nieuwe uitdaging? Voor een uitdagende werkgever in omgeving Waalwijk zijn wij op zoek naar een enthousiaste softwareontwikkelaar met kennis of ervaring met C# en SQL. In een uitdagende rol als C#.NET Developer werk je samen met een enthousiast en informeel team aan het bouwen van maatwerk software voor variërende klanten. Verder ziet jouw takenpakket er als volgt uit: Je draagt bij aan de implementatie van aanpassingen, verbeteringen en aanvullingen in de C# based applicaties; Je houdt je bezig met het ontwikkelen

Bekijk vacature »

Freelance JAVA / C# Developer

Functieomschrijving Voor een opdrachtgever in omgeving Zoetermeer zijn wij op zoek naar ervaren JAVA of C# Developers die graag op projectbasis willen werken. Je komt terecht bij een informele developers club die mooie projecten uitvoeren voor grote klanten. Ben je een ervaren freelancer of werk je in loondienst en ben je toe aan een nieuwe uitdaging? Lees dan snel verder want wie weet is dit een leuke vacature voor jou! Het fijne van deze werkgever is dat je zelf mag beslissen hoe je te werk wilt gaan. Wil je als freelancer werken dan is dat OK. Wil je de zekerheid

Bekijk vacature »

Functioneel Applicatiebeheerder

Wij van CNB zijn op zoek naar een leergierige Functioneel Applicatiebeheerder CNB is de grootste dienstverlener in de markt van bloembollen en vaste planten. In deze markt verricht CNB de volgende diensten: bemiddeling, veilen en het koelen en prepareren van bloembollen. Vanuit ons hoofdkantoor in Lisse werken bijna 100 collega’s dag in dag uit aan de bemiddeling van bloembollen. In Bovenkarspel vindt het koelen en prepareren van de bloembollen plaats. Wij zijn op zoek naar een enthousiaste Functioneel Applicatiebeheerder die naast een applicatie, ook sfeer kan bouwen! Jij: Vindt het leuk om binnen een klein IT-team aan de slag te

Bekijk vacature »

Front-end developer (Vue.js) gezocht!

Functie Als Front-end developer is het jouw doel om efficiënte en effectieve frontend code te ontwerpen, ontwikkelen en onderhouden die goed aansluit bij de functionele behoefte vanuit de klant. Je zorgt voor optimale SEO-resultaten, sitespeed en frontend security. You build it, you run it, you own it! Je maakt deel uit van een DevOps Scrum team en werkt samen met back-end developers, test-engineers, interaction designers en een projectmanager. Er zijn verschillende groepen Scrum teams. Een roadmap team is jouw ‘’thuisbasis’’, daar wordt gewerkt aan doorontwikkeling van bestaande omgevingen voor een aantal klanten. Hiernaast zijn er projectteams waar nieuwe omgevingen worden

Bekijk vacature »

Junior .NET Developer

Dit ga je doen Ontwikkelprocessen verder optimaliseren en verder ontwikkelen met C#; CI/CD-pipelines automatiseren; Ontwikkelen van herbruikbare componenten; Front-end pagina's gebruiksvriendelijk maken. Hier ga je werken Als junior .NET Developer kom je terecht binnen een grote en internationale organisatie. Zij streven naar een positieve impact op de mens, milieu en maatschappij. Het bedrijf is oorspronkelijk een familiebedrijf en werkt aan de productie van hoogwaardige en technische systemen voor de gezondheidszorg. Momenteel willen zij betere ontwikkelprocessen creëren op internationaal gebied en staat kwaliteit en veiligheid voor hun op nummer 1! Als junior .NET Developer werk je aan het ontwikkelen van verbeterde

Bekijk vacature »
- Rob -

- Rob -

14/02/2017 17:38:09
Quote Anchor link
Hallo!

Ik was weer aan het experimenteren met OOP maar ik stuiterde op een vraag waar ik niet uit kwam en het niet precies op Google kon vinden..

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
class Database {
  protected $_hostname = 'localhost';
  protected $_username = 'root';
  protected $_password = '';
  protected $_database = 'rob';


  public function connect() {
    $connection = mysqli_connect($this->_hostname, $this->_username, $this->_password, $this->_database);

    if(!$connection) {
      printf('Error met verbinding');
      exit();
    }
  }
}

class User extends Database {
  public $test = 'test';

  public function __construct() {
    $database = new Database;
    $database->connect()->real_escape_string($test);
  }
}

$database = new Database();
$database->connect();

$user = new User;


Hoe kan ik in de User class de variable $connection aanroepen voor bv. real escape string toe te passen?
Of zou ik hier in de Database class functions voor moeten aan maken of dergelijk?

Toevoeging op 14/02/2017 17:59:08:

UPDATE CODE:

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
class Database {
  protected $_hostname = 'localhost';
  protected $_username = 'root';
  protected $_password = '';
  protected $_database = 'rob';

  public $connection;

  public function connect() {
    $this->connection = mysqli_connect($this->_hostname, $this->_username, $this->_password, $this->_database);

    if(!$this->connection) {
      printf('Error met verbinding');
      exit();
    }
  }
}

class User extends Database {
  public $test = 'test';

  public function __construct() {
    $database = new Database;
    $con = $database->connection;
    $con->real_escape_string($test);
  }
}


error bij de code is:
Fatal error: Uncaught Error: Call to a member function real_escape_string() on null in C:\xampp\htdocs\index.php:28 Stack trace: #0 C:\xampp\htdocs\index.php(35): User->__construct() #1 {main} thrown in C:\xampp\htdocs\index.php on line 28
Gewijzigd op 14/02/2017 18:00:39 door - Rob -
 
PHP hulp

PHP hulp

07/05/2024 11:38:29
 
Ben van Velzen

Ben van Velzen

14/02/2017 18:14:12
Quote Anchor link
2 punten:
1. Waarom extendt de User class de Database class? Wat denk je hiermee te bereiken?
2. Je zegt nergens $database->connect() dus zal $database->connection nooit gevuld zijn, zoals je foutmelding aangeeft.
 
- Rob -

- Rob -

14/02/2017 18:43:08
Quote Anchor link
1. Dit is gewoon even om te oefenen
2. Waar moet ik connect() dan aangeven? Als ik dat toevoeg, dus zo: $database->connect(); geef hij nog steeds de zelfde error?

Heeft iemand misschien een voorbeeld van hoe ik dit moet doen?

Toevoeging op 14/02/2017 18:45:19:

Laat het voorbeeld maar ;-)

Ik heb nog even goed ernaar gekeken en kwam hierop uit:
$database = new Database;
$database->connect();
$database->connection->real_escape_string($this->test);
 
Ward van der Put
Moderator

Ward van der Put

14/02/2017 18:52:00
Quote Anchor link
Ik denk dat je inderdaad eens naar het data mapper pattern wilt kijken. Dan krijg je namelijk dit:

User <—> UserMapper <—> Database

Je moet véél abstracter leren denken als je de vergissing zoals class User extends Database begaat. De user is namelijk geen database. En de user vult de database ook niet aan. Klinkt raar, maar zo logisch is het wel.

In plaats daarvan krijg je:

• een user die een user is (en niet meer dan dat);
• een database om dingen in op te slaan en dingen uit te halen;
• een mapper die een user uit de database haalt of in de database opslaat.
 
- Rob -

- Rob -

14/02/2017 18:58:04
Quote Anchor link
aa, oké

Maar in de User class wil ik functions aan maken zoals givePromotion() moet dit dan ook via de mapper? Want ik had een paar oude bestanden een daar heette de Database class Object en werd het class User extends Object
Is dat dan wel goed gedaan? Of zit ik nu gewoon erg mis?
 
Ben van Velzen

Ben van Velzen

14/02/2017 19:34:37
Quote Anchor link
Het is niet logisch dat een gebruiker een database class extendt. Is een gebruiker een database? Nee.
Begin gewoon vanaf het begin, en ga niet zitten "oefenen" zonder dat je begrijpt wat je oefent. Er zijn boeken volgeschreven over OOP.
 
- Rob -

- Rob -

14/02/2017 19:49:37
Quote Anchor link
de class gebruiker is niet voor de gebruikers zelf, maar voor de functies voor de gebruikers en administrators voor de gebruikers zoals: Promoties geven, degraderen, etc.
 
Ben van Velzen

Ben van Velzen

14/02/2017 19:51:15
Quote Anchor link
Dan nog is het geen database. Vreemde opstelling, dat wel.
 
Ozzie PHP

Ozzie PHP

14/02/2017 20:09:13
Quote Anchor link
>> de class gebruiker is niet voor de gebruikers zelf, maar ...

Dan klopt de naamgeving van de class dus niet.
 
Bart V B

Bart V B

14/02/2017 20:23:50
Quote Anchor link
Ik denk dat je terug moet naar de tekentafel.
Kan een User promotie geven of een Administrator?

Je moet het zo zien:
Een auto is een object, die gebruikt benzine.
Maar is het benzinestation dan ook onderdeel van de auto?

Dus een database (het benzine station)
Is nooit een onderdeel can een User (auto).
 
Frank Nietbelangrijk

Frank Nietbelangrijk

15/02/2017 00:23:38
Quote Anchor link
Dit is een user class (wel een heel kleintje)

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
<?php
class User /* Ik weet enkel en alleen maar waar een user uit bestaat en van de rest van de wereld weet ik niets */
{
    private $name;
    private $email;

    /* dit noemen we ook wel een setter */
    public function setName($name)
    {

        $this->name = $name;
    }

    
    /* dit noemen we ook wel een getter */
    public function getName()
    {

        return $this->name;
    }


    /* hier nog een setter en getter voor $email */
    public function setEmail($email)
    {

        $this->email = $email;
    }

    
    public function getEmail()
    {

        return $this->email;
    }
}

?>


Hier een basis Mapper:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
class Mapper
{
    protected $db;

    /* de constructor */
    public function __construct($db)
    {

        $this->db = $db;
    }
}

?>


Dan een UserMapper die de eigenschappen van de basis Mapper overerft. (Handig als je later ook andere mappers wilt toevoegen)
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
<?php
class UserMapper extends Mapper
{
    public function __construct($db)
    {

        parent::__construct($db);
    }


    public function getUser($id)
    {

        $result = $this->db->query("SELECT * FROM users WHERE id=" . $id);
                
        if($result->num_rows == 1)
        {

            $row = $result->fetch_assoc();

            $user = new User();
            $user->setName($row['name']);
            $user->setEmail($row['email']);
                        
            return $user;
        }


        return null;
    }


    /* andere functies zoals getAllUsers(), createUser(), updateUser() en deleteUser() nog toe te voegen */
}
?>


test:
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

/* eigenlijk zou je ook een database class moeten hebben maar gemakshalve gebruiken we hier de standaard php mysqli class even */
$db = new mysqli("localhost", "db_user", "db_pass", "db_name");

/* check connection */
if ($db->connect_errno) {
    printf("Connect failed: %s\n", $db->connect_error);
    exit();
}


// maak een instantie van UserMapper aan
$userMapper = new UserMapper($db);

// laad user met id 1 uit de database
$user = $userMapper->getUser(1);

// testje
echo $user->getEmail();

?>


Let op: Dit is slechts een voorbeeld en verre van compleet. Maar het geeft je hopelijk een kickstart...

Er zijn nog allerlei zaken die je later moet toevoegen om het echt lekker te laten werken.
Gewijzigd op 15/02/2017 00:29:26 door Frank Nietbelangrijk
 
Thomas van den Heuvel

Thomas van den Heuvel

16/02/2017 10:57:10
Quote Anchor link
Alternatief: een referentie van het database-object rechtstreeks meegeven bij de constructie van een user-object (als het gaat om de "huidige gebruiker", zie hieronder)?

Het hangt ook af wat je verstaat onder (een object van of objecten van) de User class: vertegenwoordigt een object van de User class de huidige (ingelogde) gebruiker van een systeem of een generiek object die een willekeurige (en niet zozeer de huidige) gebruiker uit het systeem representeert waar je bewerkingen op uit kunt voeren. In dit laatste geval is de aanpak met een Mapper weer geschikter.

Oftewel: @Rob, waar wil jij een User (object) voor gebruiken? Of wat voor idee steekt er achter jouw User class?
 
Ward van der Put
Moderator

Ward van der Put

16/02/2017 11:41:10
Quote Anchor link
Thomas van den Heuvel op 16/02/2017 10:57:10:
Alternatief: een referentie van het database-object rechtstreeks meegeven bij de constructie van een user-object (als het gaat om de "huidige gebruiker", zie hieronder)?

Ik heb er zelf nog wat lagen tussen zitten:

• class Connection extends PDO
• abstract class AbstractModel uses Connection
• abstract class AbstractDAO extends AbstractModel
• class UserMapper extends AbstractDAO
• class User

Het Data Access Object (DAO) kan de vier standaardqueries uitvoeren: INSERT, SELECT, UPDATE en DELETE. Zo kun je er met efficiënt weinig extra code zo veel mappers aan hangen als je wilt.
Gewijzigd op 16/02/2017 11:44:09 door Ward van der Put
 



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.