[oop] property afdwingen?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Medior Front-end Developer

Bij Getnoticed doen wij wat we leuk vinden, websites bouwen en online marketing. Voor veel van onze klanten doen we dan ook allebei. Wel zo fijn om campagnes te draaien voor conversiegerichte websites die in eigen beheer zijn. In onze vestiging in Nederweert zit onze development afdeling en worden de websites gebouwd. Op dit moment zijn we op zoek naar jou: dé Medior Front-end Developer die net als wij, het hoofd boven het maaiveld durft uit te steken! In het kort Even een paar punten die omschrijven wat deze toffe baan inhoudt: Het uitwerken van designs tot functionele layouts Je

Bekijk vacature »

Medior Java developer (fullstack)

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 »

Senior PHP Developer

Als Senior PHP Developer bij Coolblue zorg je ervoor dat onze webshops elke dag een beetje beter zijn en coach je andere developers op de hard en soft skills. Wat doe je als Senior PHP Developer bij Coolblue? Als PHP Developer werk je met andere development teams samen om onze webshop zo optimaal mogelijk te laten werken en onze klanten blij te maken. Hoewel je een PHP Developer bent, sta je open om C# of Typescript in te zetten of te leren. Ook PHP Developer worden bij Coolblue? Lees hieronder of het bij je past. Dit vind je leuk om

Bekijk vacature »

.NET Developer

Functie omschrijving .NET developer met ervaring gezocht! Voor een softwarebedrijf in de regio Veenendaal zijn wij op zoek naar een .NET developer met een aantal jaar ervaring. Jij bent zowel zelfstandig als in teamverband verantwoordelijk voor het ontwikkelen en verbeteren van bestaande producten. Verder ben je bezig met nieuwbouw van websites, webapplicaties en mobiele applicaties die zowel intern als extern gebruikt worden. Je werkt hierbij nauw samen met andere developer, productmanagers en productspecialisten om zo mooie producten te creëren. Bedrijfsprofiel De organisatie waar je voor gaat werken is een snelgroeiende softwareleverancier en allround dienstverlener. Deze organisatie heeft zowel klanten die

Bekijk vacature »

Senior Front end developer Automotive Angular

Functie Als Senior Front end developer kom je te werken in een team van 11 developers. 9 van de 11 focussen zich op back end, welke is geschreven in Java, en 2 op de front end waarbij er gebruik wordt gemaakt van Typescript en Angular. De focus in deze rol ligt op 2 aspecten; doorontwikkeling van de eigen tooling en gebruik van de tooling t.b.v. klantprojecten. Momenteel zijn ze in de afrondende fase van een project waarbij ze het gehele verkoopproces van nieuwe auto’s anders ingeregeld hebben voor een grote dealer in Nederland. Waarbij Auto’s normaliter pas verkocht werden in

Bekijk vacature »

REMOTE - Front-end Angular developer

Functie Het IT-team bestaat momenteel uit de IT Manager, 2 back-end developers, 1 fullstack developer, 1 designer en een DevOps engineer. Ze zijn momenteel op zoek naar een ervaren Front-end developer die autonoom en gedisciplineerd aan de slag gaat, en bij aanvang als enige developer met hun Front-end applicaties bezig is. Wel hebben ze de ambitie om hier snel een 2e developer bij te vinden die jij dan ook zal kunnen aansturen/begeleiden. Je zult aan de slag gaan met het doorontwikkelen van hun bestaande UI in Angular. Maar ook het ontwikkelen van een mobiele app. Hierbij hechten ze veel waarde

Bekijk vacature »

Traineeship ICT regio Amsterdam/Utrecht

Wat ga je doen? Het traineeship begint met een fulltime maand cursussen en praktijkdagen, waarin je de basis van het IT-vak leert op de Shared Servicedesk (SSD). Daarnaast ga je meteen aan de slag voor je eerste certificering! (ITILv4). Je start in een groep met 4 tot 10 deelnemers, waarmee jij gedurende die maand optrekt en je kennis kunt delen. Na het voltooien van de eerste maand ga je direct voor een langere periode aan de slag bij één van onze klanten of blijf je intern bij ons op de Shared Servicedesk. Je bent het eerste aanspreekpunt van de eindgebruikers

Bekijk vacature »

Java Developer

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/senior PHP ontwikkelaar E-commerce

Functie Het software development team bestaat momenteel 5 scrum teams . Ieder team heeft een eigen SCRUM Master en eigen tester. Zij werken voornamelijk in PHP en met hun eigen geschreven framework wat Symfony based is . Jij bent samen met je collega’s verantwoordelijk voor het interne softwaresysteem en alle projecten die daar omheen lopen. Alles wat jij ontwikkelt, wordt direct toegepast en uitgerold (wereldwijd). Dit maakt jouw werk tastbaar en uitdagend! Een greep uit jouw werkzaamheden: Toevoegen en ontwikkelen van nieuwe functionaliteiten Logistieke software ontwikkelen voor intern gebruik Tientallen gigabytes aan data inzichtelijk maken Altijd op zoek gaan naar

Bekijk vacature »

Software Developer

Dit ga je doen Ontwikkelen aan de software dat beschikbaar is op de substations; Ontwikkelen in C++, C, Python en JavaScript. Daarnaast op een Embedded Linux omgeving, opgebouwd met containers en DevOps; Meewerken aan cyber security (OWASP); Uitvoeren/bouwen van geautomatiseerde testen in samenwerking met de Quality Specialist; Vertalen van wensen van de klanten/business naar werkbare/duurzame oplossingen. Hier ga je werken Als Software Ontwikkelaar kom je te werken bij een organisatie gericht op de (internationale) energiemarkt, waar wordt gewerkt voor het verwerven en verwerken van realtime, high quality data. Er wordt gewerkt vanuit het hart van de substations en direct voor

Bekijk vacature »

Ervaren Full stack developer

Functie omschrijving Ben jij op zoek naar een uitdagende in-house functie bij een bedrijf met enorme groeipotentie? Ben jij op zoek naar een nieuwe uitdaging vol afwisseling en gezelligheid? Dan ben je bij dit bedrijf aan het juiste adres! Wij zijn in omgeving Breda op zoek naar een ervaren full stack developer. Je gaat werken voor een zeer gewilde werkgever met goede arbeidsvoorwaarden. Je krijgt een plekje in het jonge IT team, work hard, play hard is hier duidelijk het motto! Jouw werkzaamheden zien er als volgt uit: Jij bent verantwoordelijk voor het ontwerpen en bouwen van webapplicaties. Je bent

Bekijk vacature »

Back-End Web Developer

As a Back-End Web Developer at Coolblue, you ensure that our webshops work as optimal as possible. How do I become a Back-End Web Developer at Coolblue? As a Back-End Web Developer you work together with other development teams to make our webshop work as optimal as possible and to make our customers happy. Although you are a PHP Developer, you also feel confident with setting up microservices in Typescript or are open to learning this. Would you also like to become a PHP Developer at Coolblue? Read below if the job suits you. You enjoy doing this Writing pure

Bekijk vacature »

Full stack developer

Wat ga je doen als Full stack .NET developer Microsoft 365? Je stelt je op als sparringpartner voor het team en PO over toekomstige functionaliteiten, architectuur en mogelijke nieuwe producten. Je bent mede-verantwoordelijk voor het vertalen en omzetten van een user story in een passend technisch design. Je implementeert functionaliteiten op basis van een technisch design en user story. Je bent mede-verantwoordelijk voor het beheer van Azure DevOps, waaronder het beheer van GIT, Build Pipelines, Release Pipelines en geautomatiseerde testen. Hier herken jij jezelf in Hbo werk- en denkniveau of hoger aangevuld met relevante certificeringen en/of cursussen; Minimaal 3 jaar

Bekijk vacature »

Software programmeur

Functieomschrijving Voor een uitdagende werkgever in regio Breda zijn wij op zoek naar een Full Stack C#.NET programmeur. Je bent verantwoordelijk voor het ontwikkelen van apps, webapplicaties en dashboards voor de eigen IOT-oplossingen. Je werkt samen met andere developers en engineers om de sensoren in machines te scannen en vervolgens de data om te zetten in management informatie voor de klanten. Taken en verantwoordelijkheden: Je gaat aan de slag met de volgende technologieën en frameworks: C#, JS frameworks, HTML, TypeScript, SQL & C++, CSS. Geen ervaring met één van deze technologieën is dan ook geen enkel probleem! Deze werkgever biedt

Bekijk vacature »

.NET developer

Functie Als .NET developer start jij in een ontwikkelteam met 15 developers en twee testers. Samen zijn jullie verantwoordelijk voor financiële applicaties met meer dan 50.000 gebruikers. Een deel van het team is verantwoordelijk voor de webapplicaties van deze organisatie. Ook zijn er twee app ontwikkelaars werkzaam in het team die zich focussen op de mobiele applicatie. Als .NET ontwikkelaar ga jij aan de slag met de webapplicaties van deze organisatie. Hierbij maak jij o.a. gebruik van C# .NET, ASP.NET, T-SQL, Angular en TypeScript. De nadruk van jouw functie ligt wel op de backend van de applicatie. Wat jouw functie

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

01/01/2025 08:07:41
 
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.