[oop] property afdwingen?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

.NET Developer te Naarden

Bedrijfsomschrijving Voor mijn klant ben ik op zoek naar een .NET Developer om het huidige team te komen versterken. Deze organisatie bevindt zich in de logistieke sector, en zij hebben een eigen ERP systeem ontwikkeld dat zij inzetten ter optimalisatie van de logistieke processen van haar eindklanten. Deze organisatie bestaat inmiddels al ruim 20 jaar, waarbij zij een duidelijke missie hebben, namelijk: het werk van de eindklant makkelijker maken door de systemen die zij leveren. Ze werken over heel de wereld, wat deze organisatie een echte internationale speler maakt. Binnen de organisatie kenmerken ze zich door een dynamische en professionele

Bekijk vacature »

.NET Developer

Dit ga je doen Binnen het team bouw je aan een applicatie met andere .Net Developers, testers een Product Owner en een Business Analyst. Met het team wordt de backlog besproken. In overleg claim jij jouw deel en zorgt ervoor dat onderhoud en innovatie wordt gerealiseerd. Het project dat momenteel draait is het opgraden van de omgeving. Doorontwikkelen van de huidige applicatie; Overleggen met teamleden om de backlog te verdelen; Onderhouden van de huidige omgeving; Sparren met de business en het ophalen van nieuwe requirements. Hier ga je werken De organisatie is een van de grootste landelijke aanbieder van diverse

Bekijk vacature »

Software developer

Werkzaamheden voor jou als software developer Voor een goede relatie in de regio Zwolle (meerdere locaties) zoeken wij een software developer die betrokken is bij de ontwikkelcyclus en verantwoordelijk is voor het testen en keuren van nieuwe en geoptimaliseerde software. In deze functie ben je in de implementatiefase de persoon die risico's beoordeelt en intern oplossingen aanbrengt om risico's te verkleinen. Binnen het ontwikkelteam van de software ben je een belangrijke schakel waar je intensief meewerkt met scrum. Het voorkomen van bugs in de programma's en het bevorderen van gebruiksvriendelijkheid voor eindklanten zijn voor jou een uitdaging en geeft voldoening

Bekijk vacature »

Low-code developer

Functie omschrijving Heb jij altijd al een training willen volgen in het buitenland? Voor een leuke opdrachtgever in omgeving Alphen ad Rijn zijn wij op zoek naar kandidaten die aan de slag willen als Low Code Developer! Beschik jij over HBO/WO nivo, bij voorkeur Informatica, maar een ander technische opleiding zoals bijv. wiskunde, natuurkunde is ook goed. Heb jij aantoonbare affiniteit met IT en ben jij gedreven, enthousiast, communicatief vaardig en klantgericht? Lees dan snel verder! Je wordt getraind tot een volwaardig Low Code Developer, het traject ziet er als volgt uit: Start 1e week januari, opleiding van 3 weken

Bekijk vacature »

Mendix Developer

For our client in Amsterdam, we are looking for a Senior Mendix Developer. Company description Our client is an IT Consultancy company who’s been active for 10 years now. With their ambitious team, they are working with different clients in order to help them with analyzing their data and giving advice to them, regarding how they can use their data in the smartest ways, or to make sure that their mobile or web applications are working efficiently. As you get a glimpse of various industries, it is guaranteed that no day will be the same. Job description As a Mendix

Bekijk vacature »

Software developer (Python)

Functie Je komt te werken in het IT-team bestaande uit de Lead developer en 4 (medior/senior) developers. Gezamenlijk werken jullie aan de verbetering en uitbreiding van de software. Binnen het development team is er veel vrijheid en zelfstandigheid, zonder dat ze hiermee afdoen aan de kwaliteit. Zo hebben ze elke ochtend een korte stand-up (10:00 uur) en houden ze zo nu en dan pair-programming sessies. Ook is er een hele professionele ontwikkelcyclus waarbij code altijd eerst door een collega wordt getest voordat het naar deployement gaat. Je hebt in je werk oog voor kwaliteit, risico’s en het klantbelang. Communicatie met

Bekijk vacature »

Senior Node.js developer Digital Agency

Functie Door de groei van de organisatie zijn ze op zoek naar een Tech Lead. Als tech lead ben jij verantwoordelijk Als Back end Node.js developer kom je terecht in een van de 8 multidisciplinaire teams in het projectenhuis. Afhankelijk van jouw interesses, wensen en capaciteiten word je bij projecten en onderwerpen naar keuze betrokken. Als ervaren ontwikkelaar zul jij vaak leiding nemen in de projecten en in het team een aanvoerder zijn van technische discussies. Uiteindelijk wil jij natuurlijk de klantwensen zo goed mogelijk vertalen naar robuuste code. De projecten kunnen varieren van langlopende- tot kleinschalige trajecten. Voorheen werkte

Bekijk vacature »

Senior developer (PHP en VB.NET)

Functie De development afdeling bestaat uit 2 teams. Het productteam (10 developers) is verantwoordelijk voor verschillende applicaties met als doel om zoveel mogelijk te automatiseren en uit te werken tot standaard software. Met diverse Solutions Architecten en ervaren developers denken ze voortdurend mee met hun klanten en bouwen ze de basis van het uiteindelijke maatwerk dat wordt geleverd. Hiernaast hebben ze een maatwerk/projectteam. Dit team bestaat momenteel uit 8 developers (junior tot senior) en is verantwoordelijk voor het maatwerk in hun klantprojecten. Momenteel zijn ze op zoek naar een senior developer die aan de slag gaat in het productteam. Hierin

Bekijk vacature »

SQL developer

Functieomschrijving Voor een erkende werkgever in de omgeving van Tilburg zijn wij op zoek naar een ervaren SQL ontwikkelaar. Hier wordt jij mede verantwoordelijk voor zowel de design en implementatie van SQL-databases als voor het verstaan van de processen van klanten naar het vertalen van deze processen naar IT-oplossingen. Jouw takenpakket komt er als volgt uit te zien: Het ontwerpen en implementeren van databaseschema's: Je bent in staat om een database te ontwerpen en de structuur van tabellen, relaties, indexen en andere objecten te definiëren; Het schrijven van complexe SQL-query's: Je kunt complexe query's schrijven om gegevens uit de database

Bekijk vacature »

Junior Front-End Developer

Je maakt een vliegende start van je carrière, door meteen mee te bouwen aan de digitale oplossingen van Coolblue. Wat doe je als Junior Front-End Developer bij Coolblue? Als Junior Front-End Developer ben je meteen vanaf de start onderdeel van een development team. Je kijkt veel mee met collega’s en volgt trainingen. Op dat moment komt je wil om te blijven leren naar boven. Daarnaast pak je in de sprints ook je eigen stories op om Coolblue iedere dag een beetje beter te maken. Je sterk analytisch vermogen komt dan goed van pas! Ook Junior Front-End Developer worden bij Coolblue?

Bekijk vacature »

.NET Developer C#

Dit ga je doen Als developer nieuwe gave features implementeren; Werken met technieken als C# .NET en (REST) API's webservices; Ontwikkelen van koppelingen middels API's; Maken van technische keuzes en beslissingen over de architectuur; Junior collega's coachen; Initiatief nemen voor nieuwe technische mogelijkheden; Je bent een belangrijke schakel - en vindt het leuk - om te schakelen met de business. Hier ga je werken Als C# .NET Developer wordt je verantwoordelijk voor het ontwikkelen van applicaties voor belangrijkste product van deze organisatie. Dit product is een applicatie voor alles omtrent hypotheken. De programmeertaal die je hierbij beheerst is C#. Er

Bekijk vacature »

Back-end .NET Developer

Functie omschrijving C# / .NET Developer gezocht voor een dynamische organisatie in de regio Houten! Voor een leuke organisatie in de regio Houten zijn wij op zoek naar een Back-end developer die klaar is voor een nieuwe uitdaging. In deze functie werk jij aan verschillende projecten en ga je vaak bij klanten op bezoek. Binnen deze functie kun je een grote mate van uitdaging, diversiteit en verantwoordelijkheid treffen. Bedrijfsprofiel Waar ga je werken? Het bedrijf waar je gaat werken is gespecialiseerd in het ontwerpen en implementeren van procesautomatisering en procesinformatisering. Zij doen dit onder andere voor de (petro)chemie, pharma, infra,

Bekijk vacature »

.NET Developer

Dit ga je doen Programmeren in .NET, Javascript & C# en ontwikkelen in Web Services, Windows Services en MS SQL Server; Zelfstandig verbanden maken Analyseren, testen, bugs fixen, reviewen en rapporteren; Juiste prioriteiten stellen en verantwoordelijkheid nemen; Op architectuur niveau meedenken; Af en toe klanten bezoeken. Hier ga je werken Voor onze relatie zijn wij opzoek naar een .NET ontwikkelaar met minimaal 3 jaar werkervaring. Je komt te werken in een groeiend bedrijf met betrokken collega's die zorgen voor een familiaire sfeer op de werkvloer. Als .NET ontwikkelaar word jij vanaf de eerste werkdag betrokken bij het gehele ontwikkelproces. De

Bekijk vacature »

Embedded Software Developer

Functie omschrijving Ben jij een Embedded Software Developer die affiniteit heeft met de allernieuwste technieken? Voor een mooi softwarebedrijf in omgeving Gouda zijn wij op zoek naar een Embedded Software developer. 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 enthousiast en een echte team player? Lees dan snel verder en laat wat van je horen! Bedrijfsprofiel Onze opdrachtgever bestaat uit een groot aantal creatieve en ambitieuze ontwikkelaars. Ze

Bekijk vacature »

SAP HANA Developer

Vacature details Vakgebied: Software/IT Opleiding: Senior Werklocatie: Veldhoven Vacature ID: 13382 Introductie We is looking for a HANA Developer to work for our client. The candidate has to have an experience in building Data Intensive Applications (DIA’s). The role of a HANA Developer at ASML involves working on building Data Intensive Applications in an industrial/enterprise environment. The primary responsibility is to handle data from various sources and determine the best way to structure it for use by data analysts, who will run queries and algorithms against it for predictive and prescriptive analytics through machine learning. Wat verwachten we van jou?

Bekijk vacature »

Pagina: 1 2 volgende »

Ozzie PHP

Ozzie PHP

08/12/2013 23:21:28
Quote Anchor link
Ola,

Is er een manier om een class property af te dwingen?

Stel we hebben een abstracte class Bar. Hierin zou ik graag een abstracte class property in willen opnemen die door de child classes moet worden ingevuld. Dit lijkt echter niet te kunnen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
abstract class Bar {

abstract protected $bar;

}

?>

Zijn er andere mogelijkheden?
 
PHP hulp

PHP hulp

04/01/2025 03:32:36
 
Wouter J

Wouter J

08/12/2013 23:23:26
Quote Anchor link
Nee, dat kan niet. Gebruik ipv een getter om af te dwingen. Zie hier weer zo'n zelfde geval als in het interface topic: je moet een gedrag afdwingen (method), niet in implementatie (property).
 
Erwin H

Erwin H

08/12/2013 23:24:46
Quote Anchor link
Probeer eens uit te leggen waarom je dit nu eigenlijk wilt? En begrijp dan dat het eigenlijk gewoon een beetje kolder is....
 
Ozzie PHP

Ozzie PHP

08/12/2013 23:31:06
Quote Anchor link
@Wouter: hmmm, oké... das jammer.

@Erwin: het zou fijn zijn als wanneer iemand een vraag stelt je daar niet meteen een waarde-oordeel aan hecht. Niet iedereen heeft dezelfde kennis als jij. Ik stel een serieuze vraag en vind het niet echt prettig als jij dat dan afdoet als "een beetje kolder". De ene mens weet veel van onderwerp A en de andere mens weet veel van onderwerp B. Zo gaat het nu eenmaal in het leven. Probeer dat feit aub te respecteren.

Ik heb een abstracte class. Ik wil aan de child classes een makkelijk leesbare naam geven. In de abstract class wil ik dan een getName method maken die de class property $name returnt. Maar dan moet dus wel iedere child class de property $name hebben. Vandaar dat ik me afvraag hoe je dat het beste kunt afdwingen.
Gewijzigd op 08/12/2013 23:31:38 door Ozzie PHP
 
Erwin H

Erwin H

08/12/2013 23:38:53
Quote Anchor link
Ozzie, ik zal me verder onthouden van antwoorden op je topics, dat is misschien beter.
 
Ozzie PHP

Ozzie PHP

08/12/2013 23:45:13
Quote Anchor link
Dat hoeft niet hoor Erwin. Je bijdrages zijn altijd ZEER nuttig en ik leer daar ook van. Alleen de sarcastische ondertoon mag soms een beetje minder ;) Sommige dingen zijn voor jou vanzelfsprekend en voor mij (nog) niet. Een forum is een ideaal medium om zelf dingen te leren en om dingen aan iemand anders te leren. Je moet er altijd vanuit gaan dat mensen met een reden een bepaalde vraag stellen... ook al kan dat in jouw ogen nog zo dom zijn. Blijkbaar weet iemand iets niet en dan is het toch alleen maar leuk als je iemand kunt helpen? Zo kijk ik er in ieder geval tegenaan. En ja, jij bent een stuk vergevorderder in deze materie dan ik, en juist daarom is het fijn als je mij helpt... maar dan graag zonder te zeggen dat ik dom of idioot ben :D
 
Dos Moonen

Dos Moonen

09/12/2013 07:45:26
Quote Anchor link
Ozzie PHP op 08/12/2013 23:31:06:
Ik heb een abstracte class.

OK:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php

abstract class Miauw
{

}


?>


Ozzie PHP op 08/12/2013 23:31:06:
In de abstract class wil ik dan een getName method maken.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php

abstract class Miauw
{

    abstract public function getName();

}


?>



Ozzie PHP op 08/12/2013 23:31:06:
Die getName() method returnt de class property $name. Maar dan moet dus wel iedere child class de property $name hebben.

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

abstract class Miauw
{

    protected $name;

    public function getName()
    {

        return $this->name;
    }

}


?>


Edit:
Ik had het gelukkig fout wat underscores en PSR standaarden betreft.
Quote:
Property names SHOULD NOT be prefixed with a single underscore to indicate protected or private visibility.
Gewijzigd op 09/12/2013 10:53:14 door Dos Moonen
 
Wouter J

Wouter J

09/12/2013 07:56:07
Quote Anchor link
> PSR-# wilt underscores geloof ik

Ik hoop het niet... ;-)
 
Ward van der Put
Moderator

Ward van der Put

09/12/2013 07:57:58
Quote Anchor link
Je kunt het afdwingen met __construct($name) voor een constructor met een vereist argument. Daarna maak je zowel de constructor als de setter final om alle childs te dwingen deze methoden te gebruiken en daarmee dus de vereiste eigenschap.

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
abstract class Foo
{
    private $Name;

    /**
     * @api
     *
     * @access final public zodat altijd deze constructor wordt gebruikt en
     *   alle childs daarmee de vereiste parameter $name implementeren.
     */

    final public function __construct($name)
    {

        $this->setName($name);
    }


    final public function getName()
    {

        return $this->Name;
    }


    /**
     * @internal
     *
     * @access final private zodat deze methode alleen intern kan worden gebruikt
     *   en daarmee de constructor de enige ingang wordt.
     */

    final private function setName($name)
    {

        if (!is_string($name)) {
            throw new \InvalidArgumentException('Name is not a string.');
        }
else {
            $this->Name = $name;
        }
    }
}

?>
 
Ozzie PHP

Ozzie PHP

09/12/2013 09:57:47
Quote Anchor link
Helaas is dit niet wat ik bedoel. Het voorbeeld van Dos komt in de buurt, maar wat ik dan als "extra" wil, is dat alle child classes zelf de property $name moeten invullen. Hmmm, een ander voorbeeld 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
<?php

abstract class Car {

  public function getConsumerName() {
    return $this->consumer_name;
  }

}


class Astra_Opel_X65_12AZ extends Car {

  protected $consumer_name = 'Opel Astra';

}


class Escort_Ford_ABC_123 extends Car {

  protected $consumer_name = 'Ford Escort';

}


?>

De abstract parent class gebruikt dus een property $consumer_name uit de child classes en nu wil ik dus dat iedere child class zo'n property heeft. Dit wil ik op de een of andere manier kunnen afdwingen. Het mag ook een constante zijn, maar het gaat er dus om dat de abstract class gebruik kan maken van een waarde die in iedere child class aanwezig is.
 
Ward van der Put
Moderator

Ward van der Put

09/12/2013 10:13:05
Quote Anchor link
Dan doe je het bijvoorbeeld zo, opnieuw via een final en dus verplichte constructor in de abstract class:
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
<?php
abstract class Car
{
    protected $consumer_name;

    final public function __construct()
    {

        if (empty($this->consumer_name)) {
            throw new \Exception('Consumer name not set.');
        }
    }


    public function getConsumerName()
    {

        return $this->consumer_name;
    }
}


class NoNameCar extends Car
{
    // Oeps, property vergeten in te stellen
    //protected $consumer_name = 'Hier had de naam gemoeten gemoeten';

}

// Gooit een exception
$car = new NoNameCar();
?>

Een alternatief is de exception uitstellen door deze te verplaatsen naar getConsumerName() omdat je daar de naam pas gebruikt.
 
Ozzie PHP

Ozzie PHP

09/12/2013 10:17:12
Quote Anchor link
Oké, dan zou het inderdaad zoiets moeten worden. Ik had het handiger gevonden als je gewoon een property kon afdwingen, maar dan moet ik het inderdaad in zo'n soort oplossing gaan zoeken. Thanks!
 
Dos Moonen

Dos Moonen

09/12/2013 11:14:40
Quote Anchor link
Zo ben je er aardig zeker van dat getName() alleen maar correcte data terug geeft:

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

abstract class Miauw
{

    protected $name;

    final public function getName() // Final!
    {
        if ( ! is_string($this->name))
        {

            throw new DomainException(sprintf('%s::$name is of type %s, string expected', static::class, gettype($this->name)));
        }


        return $this->name;
    }

}


class Goed extends Miauw
{

    public function __construct()
    {

        $this->name = 'Yay!';
    }

}


class Fout extends Miauw
{

    public function __construct()
    {

        $this->name = 42;
    }

}


try
{
    $goed = new Goed();

    var_dump($goed->getName());

    $fout = new Fout();

    echo $fout->getName();
}

catch (Exception $e)
{

    var_dump($e->getMessage());
}


?>
 
Ozzie PHP

Ozzie PHP

09/12/2013 11:21:49
Quote Anchor link
thanks :)

Toevoeging op 09/12/2013 11:23:41:

static::class werkt niet?
 
Dos Moonen

Dos Moonen

09/12/2013 11:33:31
 
Ozzie PHP

Ozzie PHP

09/12/2013 11:36:57
Quote Anchor link
Ah oke. Deze werkt overigens ook: get_called_class() Geen idee wat het verschil is met get_class($this) ?
 
Dos Moonen

Dos Moonen

09/12/2013 12:13:54
Quote Anchor link
Oh, die werkt ook ja. Zolang je __CLASS__ maar niet gebruikt, die geeft namelijk de class waar de aangeroepen methode gedefineerd is terug.

get_called_class() is beschikbaar vanaf PHP 5.3, de zelfde versie die namespaces introduceerde, dus je zit goed.

Edit: moest inderdaad get_called_class() zijn...
Gewijzigd op 09/12/2013 13:28:47 door Dos Moonen
 
Ozzie PHP

Ozzie PHP

09/12/2013 12:18:57
Quote Anchor link
>> get_declared_class() is beschikbaar vanaf PHP 5.3, de zelfde versie die namespaces introduceerde, dus je zit goed.

Je bedoelt get_called_class?

Wat is trouwens beter, om een method te gebruiken, dus get_called_class()? Of zoals jij doet met static::class? En gaat het dan toevallig mis als je een class property met de naam $class hebt?
Gewijzigd op 09/12/2013 12:19:29 door Ozzie PHP
 
Wouter J

Wouter J

09/12/2013 12:54:16
Quote Anchor link
>> En gaat het dan toevallig mis als je een class property met de naam $class hebt?

Nee, ::class is de syntax in PHP5.5 betekend dat je de FQCN krijgt. (zie ook php.net) Een property is static::$class
 
Ozzie PHP

Ozzie PHP

09/12/2013 12:59:26
Quote Anchor link
Ah zo, oké. Is dat dan een soort vervanging voor de magic constant __CLASS__ ?
 
Wouter J

Wouter J

09/12/2013 13:05:21
Quote Anchor link
Nee, __CLASS__ gelde alleen voor de huidige class. ::class kan gebruikt worden in elke omstandigheid:
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
<?php
namespace Foo {
class Baz{
}

class Foo extends Bas
{
    public function fiz()
    {

        echo $this::class; // Foo\Foo
        echo static::class; // Foo\Bas
    }
}


echo Foo::class; // Foo\Foo
}
?>
 

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.