[OOP] Self-destruct class

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Full stack Developer / .NET / Angular / Azure

Dit ga je doen Jij gaat je als Full Stack .NET Developer voornamelijk bezighouden met: Het vertalen van concepten naar passende innovatieve en duurzame oplossingen; Het ontwikkelen van bedrijf kritische en gebruiksvriendelijke applicaties voor de internationale markt en intern gebruik; Bouwen aan software om het Internet of Things netwerk te ondersteunen; Het maken en onderhouden van interfaces tussen systemen aan de hand van API's; Het onderhouden en blijven verbeteren van de ontwikkelde software. Hier ga je werken Binnen deze organisatie zal jij als Full Stack .NET Developer een belangrijke rol krijgen en ga je dagelijks de uitdaging aan om maatwerk

Bekijk vacature »

Magento2 Developer

Functie Ben jij een ontwikkelaar en wil jij een volgende stap zetten en als teamlead aan de slag? Lees dan snel verder! Voor een gewilde opdrachtgever in omgeving Delft zijn wij op zoek naar een programmeur die als meewerkend voorman aan de slag wilt gaan. Een developer die een team van twee man aan zal sturen. Jouw werkzaamheden zullen er als volgt uitzien; Ontwikkelen en ontwerpen van API's; Maatwerkoplossingen; Databeveiliging; Optimalisatie webshops; Ontwikkelen technische implementaties voor verbetering database; Aanspreekpunt voor de organisatie en verantwoordelijk voor de aansturing van externe developers. Zoek je veel uitdaging en veelzijdigheid in je werk dan

Bekijk vacature »

Delphi developer

Functie Als Delphi developer ga jij aan de slag in een team met twee andere ervaren Delphi programmeurs waaronder de Hoofd programmeur. Als team zijn jullie verantwoordelijk voor de doorontwikkeling van jullie bestaande applicatie. Daarnaast zijn jullie verantwoordelijk voor het onderhouden van deze applicatie en het oplossen van eventuele bugs. Eisen - HBO werk en denk niveau; - Minimaal één jaar ervaring met Delphi; - Goede beheersing van de Nederlandse taal in woord en geschrift; - Jij bent zelfstandig, maar kan ook in team verband werken. Aanbod - €3000,-- €4000,- op basis van jouw kennis en ervaring; - 8% vakantiegeld;

Bekijk vacature »

Back-End Developer in Laravel / PHP

Functie omschrijving Wij zijn op zoek naar een Medior PHP Laravel Developer voor een gaaf bedrijf in de omgeving van Amsterdam! Voor een enthousiast team die zich graag bezig houdt met softwareontwikkeling zijn wij op zoek naar versterking. Je werkt in een klein ontwikkelteam en bent zeer betrokken bij alle aspecten van de softwareoplossingen. Van het ontwerpen tot de oplevering. Binnen deze functie ga je aan de slag met het aanpassen, verbeteren en vernieuwen van de logistieke oplossingen. Je krijgt veel te maken met koppelingen naar systemen en de verzoeken van de klant. Je komt terecht in een team, waarbij

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 »

Back-end Developer C#

Functie omschrijving We are looking for a dutch native speaker Ben jij een ervaren back-end developer, die graag in een in-house functie wil werken? Passen de woorden innovatie, programmeren en teamspeler bij jou? Zoek niet verder en lees snel verder. Voor een echt familiebedrijf in de regio van Uden ben ik op zoek naar een back-end developer, die met name kennis heeft van C# en .NET. Jij gaat de interne applicaties verder optimaliseren en nieuwe features ontwikkelen. Verder ga je de volgende werkzaamheden uitvoeren: Ondersteunen gebruikers; Uitvoeren van analyses van de software/applicaties; Maken van functionele ontwerpen en deze door vertalen

Bekijk vacature »

C#.NET Developer

Functieomschrijving We are looking for a dutch native speaker In deze uitdagende functie ga je werken als onderdeel van het development team, in de functie van C#.NET Developer, Je gaat maatwerk software bouwen voor diverse klanten. Ook optimaliseer je bestaande software en bouw je API koppelingen. Je bent vooral met back-end development bezig. Je krijgt veel vrijheid in deze functie en je krijgt de kans om mee te denken in bedrijfsprocessen. Deels thuiswerken is geen enkel probleem! Bedrijfsprofiel Deze organisatie is gevestigd in de regio van Boxtel. Het is van oorsprong een familiebedrijf, die gestart zijn met het bouwen van

Bekijk vacature »

Ervaren Software Developer

Functie omschrijving Ben jij een ervaren Software Developer, en heb je ervaring met technieken zoals C#, MS Access & SQL? Vind jij het leuk om maatwerk software te ontwikkelen voor klanten in een specifieke branche? Dan is dit de baan voor jou! Als ontwikkelaar ben jij samen met een team van 12 collega’s verantwoordelijk voor het bouwen van nieuwe functionaliteiten en het uitbreiden van de core applicatie. Belangrijk is dat je ervaring hebt met C# en MS Access. Je bent flexibel en klantvriendelijk ingesteld, omdat het belangrijk is om de klanten zo goed mogelijk van dienst te kunnen zijn. Thuiswerken

Bekijk vacature »

Fullstack Webdeveloper .NET Azure Big Data SaaS

Bedrijfsomschrijving Deze klant van ons is recentelijk onderdeel geworden van een grote moederorganisatie, ze zijn dé partij als het gaat om software maken voor ambitieuze ondernemers, ze maken maatwerk software. Vanuit het fantastisch vormgegeven hightech gebouw te Rotterdam centrum werken ze met zo'n 40 medewerkers aan hoogwaardige software gericht op financiële data, betaalinformatie, maar ook backoffice software. De software wordt webbased, desktop en mobile aangeboden en er worden zeer moderne ontwikkeltechnieken toegepast. Je moet dan denken aan patroonherkenning, Big Data, Machine Learning en OCR. Als Developer, ongeacht je niveau, ga je hier te maken krijgen met de allerleukste kant van

Bekijk vacature »

Software Developer (Junior functie)

Functieomschrijving Wij zijn op zoek naar een Software Developer! Sta jij in de startblokken om je carrière te beginnen en kan je niet wachten om toffe software te gaan ontwikkelen? Kortom, ben je onlangs afgestudeerd of sta je op het punt om je papiertje te behalen? Voor een IT dienstverlener dat gespecialiseerd is in Microsoft technologie zijn wij op zoek naar C#.NET Developers. Het bedrijf heeft meerdere klanten in regio Utrecht waar je permanent kan komen te werken. Kom je liever te werken bij een klein softwarebedrijf of bij een groot consultancy bureau? Dat is helemaal aan jou de keuze!

Bekijk vacature »

Softwareontwikkelaar Cleopatra

Functieomschrijving Voor de gemeente Amsterdam zijn wij op zoek naar een softwareontwikkelaar Cleopatra. 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 brom- en 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. Functie

Bekijk vacature »

Senior Product Developer

Functieomschrijving Als senior Product Developer ben je verantwoordelijk voor bestaande mobiliteitsproducten en de ontwikkeling van nieuwe mobiliteitsconcepten. Met behulp van diverse klantonderzoeken, klantsessies en salesmeetings zorg je ervoor dat je de veranderende mobiliteitsbehoeften in de markt kent. Hier speel je op in door innovatieve, flexibele, efficiënte en duurzame vervoersoplossingen te bedenken, te ontwikkelen, te implementeren en uiteindelijk samen met Sales en Marketing collega’s in de markt te zetten. Je initieert en neemt deel aan (internationale en afdeling overschrijdende) projecten, vaak in de rol van projectleider. In die rol bewaak je de voortgang, coördineer je de activiteiten en zorg je voor

Bekijk vacature »

Back End Developer .NET

Dit ga je doen Ontwikkelen in C# .NET en werken aan nieuwbouw, uitbouw en onderhoud van de software (die communiceren met 68.000 sensoren, waardoor er meerdere miljoenen berichten per uur verwerkt worden); Samenwerken in Scrum Teams; Meewerken aan verschillende, uitdagende projecten; Werken met nieuwe technologieën en vrijheid krijgen om jezelf te ontwikkelen en door te groeien. Hier ga je werken Je komt als Developer te werken bij een organisatie die gespecialiseerd is in software die real-time wordt gebruikt. De software constateert waar werk moet worden uitgevoerd en de chauffeurs worden met een andere applicatie hierop geattendeerd. Ook wordt er direct

Bekijk vacature »

Oracle APEX Ontwikkelaar (3.500-6.000 euro)

Bedrijfsomschrijving Ben jij een getalenteerde Oracle APEX ontwikkelaar met minimaal één jaar ervaring in het ontwikkelen van Oracle APEX-applicaties? Ben je gepassioneerd over het ontwikkelen van bedrijfskritische oplossingen en wil je werken bij een toonaangevend consultancybedrijf? Dan zijn wij op zoek naar jou! Deze organisatie beschikt over zowel inhouse als externe projecten, maar bovenal over een sterk team en netwerk van opdrachten waardoor jij jezelf verder kunt ontwikkelen. Het team bestaat uit een aantal junior en medior developers, maar vooral uit senioren. De business unit managers binnen het team zijn mensen die hun vak verstaan en zelf als Oracle APEX

Bekijk vacature »

.NET Developer

Functieomschrijving Ben jij klaar voor de volgende stap in jouw carrière? Kom werken bij dit kleine softwarebureau en werk aan de gaafste maatwerk projecten. Je komt te werken in een klein development team en werk nauw samen met elkaar, om maatwerk software te leveren en bij te dragen aan bedrijfsautomatiseringen. Je gaat werken met de Microsoft stack en technieken als .NET, C#, Entity, MVC, SQL server. In de functie krijg je veel vrijheid om zelf beslissingen te nemen en je hebt impact op de bedrijfsprocessen. Bedrijfsprofiel Dit familiebedrijf bestaat al ruim 20 jaar. Zij hebben een vast netwerk van klanten,

Bekijk vacature »
Ward van der Put
Moderator

Ward van der Put

07/06/2013 12:55:09
Quote Anchor link
Ik heb een klasse die slechts één keer hoeft te worden gebruikt en daarna glad vergeten mag worden. Voor een “fire and forget” zijn echter altijd twee expressies nodig, bijvoorbeeld:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$hit
= new Pageview();  // Fire
unset($hit);            // Forget
?>


Is er een elegante oplossing om dit te beperken tot één expressie?

Ik heb er nu een vereenvoudigde observer tussen gezet, alleen zet dat in geheugengebruik geen zoden aan de dijk:

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
<?php
class PageviewObserver
{
    /**
     * @param int
     */

    private $Observations = 0;

    /**
     * @param  void
     * @return object
     */

    public function __construct()
    {

        if ($this->Observations == 0) {
            $subject = new Pageview();
            unset($subject);
            $this->Observations = 1;
        }
    }
}

?>
 
PHP hulp

PHP hulp

07/01/2025 19:09:23
 
Chris -

Chris -

07/06/2013 13:53:23
Quote Anchor link
__destruct :3

Toevoeging op 07/06/2013 13:54:34:

Anyway, waarom wil je dat dan? Voor zo'n kleine class is het een beetje overdreven om alles te unsetten lijkt me..
 
Ward van der Put
Moderator

Ward van der Put

07/06/2013 14:18:37
Quote Anchor link
Chris op 07/06/2013 13:53:23:
__destruct :3

Toevoeging op 07/06/2013 13:54:34:

Anyway, waarom wil je dat dan? Voor zo'n kleine class is het een beetje overdreven om alles te unsetten lijkt me..

Chris, dank je, maar helaas werkt het aanroepen van de eigen destructor met self::__destruct() of $this->__destruct() in een klasse niet: het object blijft bestaan en is nog steeds volledig functioneel. Ergens wel logisch, want __destruct() vernietigt een object niet, maar is meer bedoeld voor alles dat je daaraan voorafgaand nog wilt doen.

Het is inderdaad maar een kleinigheid. Maar ergens is deze onmogelijkheid niet logisch. Intuïtief zou je zeggen dat een klasse de eigen rommel moet kunnen opruimen. Nu ben je altijd afhankelijk van een externe garbage collector: meestal exit en soms unset().
 
Erwin H

Erwin H

07/06/2013 14:24:23
Quote Anchor link
Kan je die externe garbage collector niet vanuit de klas aanroepen? Zoiets dus:
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
<?php

class Destroyer{
  public function destroy( $obj ){
    unset( $obj );
  }
}


class Something{
  public function __construct( Destroyer $obj ){
    //do something
    $obj->destroy( $this );
  }  
}

new
Something( new Destroyer );
?>

Niet getest overigens, alleen een idee....
 
Ward van der Put
Moderator

Ward van der Put

07/06/2013 14:57:33
Quote Anchor link
Erwin, leuk idee, maar wederom hetzelfde. Het object blijft bestaan en is nog steeds toegankelijk. Ook een (deprecated) call-time pass-by-reference levert niets op.

Ergens begrijp ik ook wel waarom een PHP-object zichzelf niet om zeep kan helpen: dat is de verantwoordelijkheid van de code die het ding in het leven heeft geroepen.
 
Kris Peeters

Kris Peeters

07/06/2013 15:07:51
Quote Anchor link
Heeft dit allemaal zin?
Destruct kan interessant zijn voor een GUI (bv. een windows programma).
Dat programma staat minuten lang te draaien; dan kan het interessant zijn om geheugen vrij te geven.

Maar php werkt gedurende een paar microseconde (of sneller). Maakt het dan uit of je de laatste 5 nanoseconden nog geheugen gaat vrij geven?
 
Ward van der Put
Moderator

Ward van der Put

07/06/2013 15:22:25
Quote Anchor link
Kris Peeters op 07/06/2013 15:07:51:
Heeft dit allemaal zin?

Daar is iedereen het wel over eens hoor, denk ik, maar zeg nooit "nooit".

Ik heb bijvoorbeeld een grafische library die zo'n 8 seconden staat te stampen. Typisch iets dat je liever niet in PHP wilt programmeren. Typisch ook iets dat je niet voor een server wilt programmeren, omdat die zelden een fatsoenlijke GPU heeft.
 
Kris Peeters

Kris Peeters

07/06/2013 15:24:04
Quote Anchor link
O ja, daar heb je een punt.
 
Chris -

Chris -

07/06/2013 15:24:31
Quote Anchor link
Ik denk dat het voornamelijk logischer is om de daadwerkelijke variabelen die een hoop data bevatten te unsetten, dan objecten. Buiten dat, dit soort dingen zijn eigenlijk alleen van toepassing wanneer je een moeilijk groot php script hebt waar de gebruiker op zit te wachten tijdens het laden. Ik kan eigenlijk geen enkele logische manier verzinnen waarop dit écht noodzakelijk is. Zodra de pagina klaar is met laden, verwijdert PHP de garbage zelf en that's it. Einde proces toch?
 
Frank Nietbelangrijk

Frank Nietbelangrijk

07/06/2013 19:41:52
Quote Anchor link
Ward van der Put op 07/06/2013 14:57:33:
Ergens begrijp ik ook wel waarom een PHP-object zichzelf niet om zeep kan helpen: dat is de verantwoordelijkheid van de code die het ding in het leven heeft geroepen.


Klinkt als een auto laten ontploffen terwijl je er nog in zit. Nee eerst de auto verlaten en dan laten ontploffen anders kan je niet meer verder. zo werkt de computer ook. je kan geen geheugen vrijgeven van een programma dat nog zijn werk doet. heeft niets met php te maken want dat is in alle talen een heilige wet.

functies zijn er voor gemaakt om tijdelijke, onafhankelijke variabelen aan te maken welke ook weer om zeep geholpen worden als de functie verlaten wordt.
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
<?php

class test {
    var
$name;
    
    function
__construct($name) {
        $this->name = $name;
        echo 'constructor '.$this->name.'<br/>';
    }
    
    function
__destruct() {
        echo 'destructor '.$this->name.'<br/>';
    }
    
};

function
dotest() {
    $a = new test('test 1');
};


// bewaar het object in een variabele
$a = new test('test 2');

// maak het object en sla het niet op.
new test('test 3');

// maak het object aan in een functie
dotest();

echo 'einde van het programma<br/>';

?>


output:

constructor test 2
constructor test 3
destructor test 3
constructor test 1
destructor test 1
einde van het programma
destructor test 2
 
Ward van der Put
Moderator

Ward van der Put

07/06/2013 19:59:13
Quote Anchor link
Frank Nietbelangrijk op 07/06/2013 19:41:52:
Klinkt als een auto laten ontploffen terwijl je er nog in zit. Nee eerst de auto verlaten en dan laten ontploffen anders kan je niet meer verder. zo werkt de computer ook. je kan geen geheugen vrijgeven van een programma dat nog zijn werk doet. heeft niets met php te maken want dat is in alle talen een heilige wet.

Frank, leuke metafoor, maar die gaat niet altijd op. Bij multithreading / multiprocessing dicht op de kernel van een OS heb je een vergelijkbaar "fire and forget"-systeem. Je besteedt een proces uit terwijl je ondertussen iets anders doet. In PHP is dat ondenkbaar: alles is lineair en chronologisch, zelfs als je het OOP bouwt.

En vooral dat laatste zou een verrijking zijn: wat nu als we een taak kunnen uitbesteden aan een object, zonder dat we er verder hinder van ondervinden? Dan zouden we applicaties kunnen bouwen met processen die niet op elkaar hoeven te wachten! En dan zouden we webapplicaties hebben die in een fractie van een seconde meerdere dingen doen!
 
Frank Nietbelangrijk

Frank Nietbelangrijk

07/06/2013 20:19:08
Quote Anchor link
Hee Ward,

Maar helpen die threads zichzelf om zeep? ik denk het niet. Uiteindelijk moet de bovenste laag van het besturingssysteem toch weten welke resources in gebruik zijn en welke niet (meer).
 



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.