[oop] property afdwingen?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Senior Cobol Applicatieontwikkelaar

Bedrijfsomschrijving De IV- organisatie van de Belastingdienst is verantwoordelijk voor en verzorgt de ICT- voorzieningen. Het merendeel van de applicaties wordt op dit moment door de IV- organisatie zelf ontwikkeld, onderhouden en beheerd in het eigen data center. Naast de zorg voor continuïteit op de massale heffing- en inningsprocessen die plaatsvinden binnen een degelijke, stabiele omgeving, wordt er tevens volop gewerkt aan modernisering van het IV- landschap. Dit gebeurt deels intern door gebruik te maken van de expertise die intern aanwezig is, maar ook door het aantrekken van (kant-en-klaar) oplossingen en expertise uit de markt. Functieomschrijving In de applicatie ETM

Bekijk vacature »

Ambitieuze medior developer

Wat je gaat doen: Heb jij al een paar jaar ervaring als developer maar wil jij naar the next level? In ons NextLevelDev Programma helpen wij jou om de volgende stap te zetten: een mooi programma aan trainingen op het gebied van Java, hippe frameworks, Agile/Scrum, OCP-certificering en optioneel: andere JVM-talen als Kotlin en Scala; Cloud (AWS, Azure, GCP) Soc 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

Bekijk vacature »

PHP back-end developer gezocht!

Functie Werk je liever zonder druk en keiharde deadlines maar met de focus op kwaliteit? Dan kom je hier op de juiste plek terecht! In Het team bestaat momenteel uit 12 developers, hiernaast werken er collega’s van front-end, UX maar ook marketing/sales en support. In iedere sprint ontwikkel je samen functionaliteiten met als uitdaging om de klanten de beste gebruikerservaring te bieden. Ze bieden een werkplek waar je jezelf kunt blijven ontwikkelen, en mee te werken aan zowel bestaande als nieuwe mogelijkheden. Eisen • HBO werk- en denkniveau (ze kijken niet naar een papiertje) • Je denkt graag mee over

Bekijk vacature »

Medior PHP developer

Functie Het team bestaat inmiddels uit zo’n 25 collega’s met specialisten op het gebied van development, data(analyse), marketing, infrastructuur en finance. Ze hebben een supermodern pand en bieden hiernaast veel vrijheid en verantwoordelijkheid. Ze doen er alles aan om jou op te gemak te stellen. Zo kun je je eigen werkplek inrichten naar persoonlijke wensen, maar gaan ze bijvoorbeeld ook jaarlijks met elkaar wintersporten en zijn er andere leuke uitjes. Als onderdeel van één van de scrumteams ga je aan de slag, samen ben je medeverantwoordelijk voor het doorontwikkelen van hun business applicatie waar het traffic team dagelijks mee werkt.

Bekijk vacature »

Lead developer (PHP, Symfony, DDD)

Functie Als Lead developer zorg je ervoor dat het team (bestaande uit zowel junior als ervaren developers) in staat is om de kwaliteit van de software (en code) verder te verhogen. In samenwerking met het team, de product owner en de andere lead developers zet je technische lijnen uit en bepaal je de prioriteiten per sprint. Lijkt het jou interessant om complexe problemen op te lossen en bijvoorbeeld een nieuwe applicatiestructuur in Symfony op te zetten? Dan komen wij graag met je in contact. Eisen • HBO werk- en denkniveau (ze kijken niet naar papieren, maar naar denkniveau, motivatie en

Bekijk vacature »

Python Developer

Dit ga je doen Als Python Developer ben je verantwoordelijk voor: Het ontwikkelen van Stuurprogramma's in Python zodat er verbindingen kunnen worden gelegd tussen besturingssystemen en (AV) hardware; Het testen en debuggen van Stuurprorgamma's; Het communiceren met noodzakelijke partijen in gevallen waar extra technische details nodig zijn om een Stuurprogramma te ontwikkelen of problemen op te lossen; Het maken van de nodige technische documentatie (in het Engels); Het participeren in een Scrum/Agile omgeving. Hier ga je werken Deze internationale organisatie is wereldwijd een succesvol producent en leverancier van professionele AV hard- en software. Klanten gebruiken de producten o.a. voor het

Bekijk vacature »

Software Developer

Dit ga je doen Je bent verantwoordelijk voor de warehouse applicatie die een integratie heeft met de PLC laag; Je ontwikkelt in C#/.Net; Je werkt mee aan de migratie naar .NET 6; Je bent verantwoordelijk voor het ontwikkelen van interfaces en het visualiseren van componenten; Je denkt mee over het design voor business oplossingen; Je bent verantwoordelijk voor het testen van de gebouwde oplossing. Hier ga je werken Voor een internationale organisatie in de transport zijn wij momenteel op zoek naar een Software Developer. Zij zijn wereldwijd de grootste speler en lopen voorop met het automatiseren van alle processen van

Bekijk vacature »

Junior PHP Developer

Functieomschrijving Junior PHP Developer gezocht! Voor een opdrachtgever in de regio Gelderland zijn wij op zoek naar een Junior PHP Developer die onderdeel gaat worden van het ontwikkelingsteam van deze organisatie. In deze functie ga jij aan de slag met het schrijven van software voor de aansturing van en het managen van windparken en bijbehorende onderdelen. Hiernaast ga jij je bezighouden met het ontwikkelen, testen en onderhouden van diverse webapplicaties. Het team waarin je komt te werken bestaat uit 3 developers, hierdoor krijg je veel verantwoordelijkheid en de kans om jezelf verder te ontwikkelen. Er wordt echter wel van je

Bekijk vacature »

Lead C++ Developer

De rol van Lead C++ Developer Als Lead C++ developer bij KUBUS word je verantwoordelijk voor het implementatie design van requirements en de software architectuur van de desktop applicaties van BIMcollab, ons platform voor 3D model-validatie en issue-management bedoeld om de kwaliteit van 3D design-modellen voor gebouwen te verbeteren. Betere 3D modellen leiden tot betere gebouwen, dus zo draag je bij aan verduurzaming van de gebouwde omgeving met slimmer gebruik van materialen, minder verspilling en energie-efficiënte gebouwen. Een goede gebruikerservaring staat bij ons hoog in het vaandel; we gaan in onze ontwikkeling voor innovatie en kwaliteit. In je rol als

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 »

Fullstack developer

Zie jij mogelijkheden om onze tooling technisch te verbeteren en uit te bouwen? Over Jobmatix Jobmatix is een innovatieve en internationale speler op het gebied van jobmarketing. Onze jobmarketing automation tool helpt organisaties bij het aantrekken van nieuw talent door vacatures digitaal, geautomatiseerd en op een efficiënte manier te adverteren en onder de aandacht te brengen bij de doelgroep op 25+ jobboards. Volledig performance-based, waarbij organisaties betalen op basis van cost per click of cost per applicant. Maandelijks wordt onze jobmarketing automation tool al gebruikt door vele directe werkgevers, intermediairs en mediabureaus, waaronder Picnic, Rijkswaterstaat, AdverOnline, Schiphol, DPA, Teleperformance en

Bekijk vacature »

Software Ontwikkelaar

Java/Kotlin Developer Ben jij een ervaren Java/Kotlin developer met een passie voor het automatiseren van bedrijfsprocessen? Wil je graag deelnemen aan uitdagende projecten bij aansprekende klanten? En ben je op zoek naar een professioneel, ambitieus en dynamisch bedrijf om je carrière verder te ontwikkelen? Kom dan ons team bij Ritense in Amsterdam versterken! Zo ziet de functie eruit: Als Java/Kotlin developer bij Ritense ben je verantwoordelijk voor de ontwikkeling en implementatie van applicaties die bedrijfsprocessen automatiseren, zodat onze klanten slimmer, efficiënter en klantgerichter kunnen werken. Als developer ben je in de lead en zorg je voor de correcte oplevering van

Bekijk vacature »

Medior front-end developer gezocht (€3.300 -

Functie Wat ga je doen? Jij als front-end developer gaat werken binnen de teams van/voor onze klant. Je werkt in een team met starters en ervaren ontwikkelaars met allemaal 1 overeenkomst; passie voor het vak. Maak je een fout? Geen probleem, leer ervan en ga dan weer door. Door de variëteit aan werk kun je in verschillende omgevingen een kijkje nemen en jezelf dus snel ontwikkelen. Wat hebben we jou te bieden? • Uitdagende projecten bij mooie klanten (bij jou in de buurt, of binnenkort intern vanuit ons kantoor!) • Een jonge organisatie met talentvolle collega’s • Veel ruimte voor

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 »

Oracle Apex Developer

Dit ga je doen Jouw taken bestaan uit: Het bouwen maatwerk Oracle applicaties voor Europese business units; Het implementeren van de nieuwste technieken om te blijven innoveren; Actief meedenken en aandragen van verbetervoorstellen. Hier ga je werken Deze organisatie in de regio Veenendaal is een van wereld grootste retailers met ruim 16.000 winkels in 27 markten en jaarlijks ruim 5,3 miljard klanten die winkelen bij een van hun welbekende retailmerken. Binnen de organisatie is er een IT Group actief die dient als IT Service Provider voor de hele organisatie en waar dagelijks IT'ers werken aan state-of-the-art IT oplossingen. Dit doen

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

24/11/2024 02:01:23
 
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.