[oop] property afdwingen?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Oracle Apex developer

Bedrijfsomschrijving My client is a technology company based in Den Bosch, the Netherlands. They specialize in providing innovative software solutions to clients, and they are currently looking for an experienced Oracle Apex developer to join the IT team. Functieomschrijving As an Oracle Apex developer, you will be responsible for designing, developing, and maintaining web-based applications using Oracle Apex. You will work closely with project managers, business analysts, and other developers to ensure that clients' needs are met and that the software solutions are of the highest quality. Responsibilities: Design, develop, and maintain Oracle Apex applications. Work with project managers and

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 »

.NET Developer gezocht!

Functie omschrijving Wij zijn op zoek naar een .NET Developer! Wil jij werken voor een internationaal bedrijf waar je legio mogelijkheden krijgt als Software Ontwikkelaar? Grijp nu je kans en kijk snel of jouw vaardigheden aansluiten bij onderstaand profiel! Je kunt een uitdagende rol gaan vervullen als .NET Developer binnen een internationaal bedrijf dat gevestigd is in omgeving Bergen. Dit bedrijf is zeer vooruitstrevend en verricht betekenisvol werk. Binnen dit bedrijf wordt gewerkt aan de productie en ontwikkeling van medische middelen. Als .NET Developer ga jij je bezig houden met het volgende: Je wordt betrokken bij alle fasen van software

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 »

Cobol Developer

Dit ga je doen Als Cobol Ontwikkelaar zal je gaan meebouwen aan een onderdeel van het backend systeem waarbij je het functionele ontwerp vertaald naar een technische oplossing die geïntegreerd kan worden in de huidige omgeving. Je zorgt ervoor dat de bedrijfsprocessen op een efficiënte manier worden uitgevoerd en werkt proactief aan het verbeteren hiervan. Samen met jouw collega’s reviewen jullie elkaars code en test je je eigen code. Je werkt nauw samen met andere ontwikkelaars, testers en functioneel ontwerpers. Taken pakket: Beheren en doorontwikkelen van de bestaande omgeving; Vertalen van een functionele vragen naar een technische oplossing; Doorvoeren van

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 .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 »

Full-stack Developer

As a Full-stack developer at KUBUS, you will develop the (web)applications and services of BIMcollab. You will work on both the front- and back-end. 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 in the market, but small enough that as an individual developer you can have an impact and really make a difference. Our development team consists of over 40 developers, testers, scrum masters and product owners, divided over

Bekijk vacature »

Medior C# Developer

You'll build modern applications for Coolblue's back office. We have a lot of friends, and they crave well-structured data and user-friendly, task-focused applications. How do I become a Medior C# Developer at Coolblue? You regularly participate in brainstorm sessions about user experience, data, and task flow with the UX Designer, Product Owner, and Data Scientists in your team. Besides that you will create disconnected, highly congruent, and testable code that can easily be maintained and is future-proof. Want to become C# Developer at Coolblue? Read below if the job suits you. You enjoy doing this Working with various types of

Bekijk vacature »

Oracle APEX developer

Wat je gaat doen: Als Oracle APEX ontwikkelaar bij DPA werk je samen met collega’s aan de meest interessante opdrachten. Je zult je ervaring met SQL, PL/SQL, JavaScript, HTML en CSS inzetten om wensen van opdrachtgevers te vertalen naar technische oplossingen. Je werk is heel afwisselend, omdat DPA zich niet beperkt tot een specifieke branche. Zo ben je de ene keer bezig binnen de zorgsector, de andere keer is dit bij de overheid. Wat we vragen: Klinkt goed? Voor deze functie breng je het volgende mee: Je hebt een hbo- of universitaire opleiding afgerond Je hebt 2 tot 5 jaar

Bekijk vacature »

Mendix Consultant / Developer

Dit ga je doen Het in kaart brengen en analyseren van de functionele wensen van de klant rondom Mendix applicaties; Het fungeren als sparringpartner voor de (interne) klanten; Het opstellen van requirements en het vertalen hiervan naar technische mogelijkheden; Het opstellen van user stories; Het bouwen van de Mendix applicaties in samenwerking met jouw team of zelfstandig; Het testen van op te leveren software en het zorg dragen voor de implementatie; Trainen van gebruikers in het gebruik van de applicatie; Werken in een Agile omgeving. Hier ga je werken De organisatie begeeft zich in de retail branche en focust zich

Bekijk vacature »

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 »

Leidinggevend Full Stack Developer

Hé jij, nieuwe Pinkcuber! Ga aan de slag bij Pinkcube, online leverancier van promotieartikelen! Een innovatieve organisatie waar extra stappen zetten voor klanten de normaalste zaak van de wereld is. Ambitieus zijn we ook. ‘Naoberschap’ staat bij Pinkcube hoog in het vaandel; we helpen elkaar en iedereen is welkom. Pinkcube is Great Place to Work Certified, erkend leerbedrijf, maatschappelijk betrokken partner van stichting Present en partner van CliniClowns. En misschien wel jouw nieuwe werkgever. Wij zoeken namelijk een enthousiaste: Leidinggevend Full Stack Developer (40 uur, medior/senior) Ben jij klaar om baanbrekende ideeën tot leven te brengen en deel uit te

Bekijk vacature »

Ervaren PHP Software Developer

Functieomschrijving Voor een toffe opdrachtgever in regio Breda zijn wij op zoek naar een medior PHP Developer met affiniteit met Laravel. Je komt te werken bij een uitdagende opdrachtgever met supergave klanten in een specifieke branche. Als PHP ontwikkelaar ben je samen met een vooruitstrevende team van 6 collega’s verantwoordelijk voor de ontwikkeling, beheer en het vernieuwen van informatiesystemen voor een specifieke branche. Je ondersteunt complexe uitdagingen van klanten. Vervolgens breng je hun wensen in kaart en vertaalt deze door naar maatwerk software. Affiniteit met Laravel is een pré. Om de klanten zo goed mogelijk te ondersteunen en snel in

Bekijk vacature »

Software ontwikkelaar ASP .Net / C#

Functie omschrijving Gezocht! Software ontwikkelaar. Ben jij bekend met termen als ASP .Net, C# en SQL? Ben jij op zoek naar een afwisselende en uitdagende IT-functie binnen de agrarische sector? En omschrijf jij jezelf als zelfstandig, enthousiast en proactief? Dan hebben wij de perfecte functie voor jou! Als Software ontwikkelaar binnen deze organisatie ben je samen met één andere collega verantwoordelijk voor de ontwikkeling en modificatie van het support en controle programma dat binnen dit bedrijf gebruikt wordt. Je gaat hierbij bijdragen aan de vertaling van klantwensen naar effectieve softwareoplossingen. Verder bestaan je werkzaamheden uit: Technische uitwerking van de business

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 04:25:24
 
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.