[OOP] Self-destruct class

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

SQL database ontwikkelaar

Functie omschrijving Ben jij niet bang voor complexe algoritmes? Schikt het schrijven van procedures in T-SQL jouw niet af en heb jij al de nodige informatie in SQL, dan is functie precies wat voor jou! Jouw werkzaamheden gaan er als volgt uit zien: Je gaat werken aan de complexere projecten waar jij van A tot Z bij betrokken bent. Je gaat zorg dragen voor het ontwerp, de ontwikkeling en het updaten van SQL databases. Dit doe je op basis van T-SQL. Jij bent van start tot finish betrokken bij de projecten die jij leidt. Je houdt contact met klanten en

Bekijk vacature »

(Junior) PHP Ontwikkelaar bij een retail bedrijf i

Bedrijfsomschrijving Ben jij een ervaren PHP ontwikkelaar met een passie voor retail en ICT? Wil jij werken in een team dat zich bezighoudt met het ontwikkelen van uitdagende applicaties voor een groot retailbedrijf in Delft? Dan zijn zij op zoek naar jou! Functieomschrijving Als PHP Ontwikkelaar werk je in een team aan de ontwikkeling van applicaties die door de gehele organisatie worden gebruikt. Je bent verantwoordelijk voor het ontwikkelen, testen en implementeren van deze applicaties. Je werkt hierbij nauw samen met andere ontwikkelaars, projectmanagers en stakeholders binnen de organisatie. Je taken bestaan onder andere uit: Ontwikkelen van nieuwe functionaliteiten en

Bekijk vacature »

Junior .NET developer

Functie Om half 9 kom jij binnen en pak jij als eerst natuurlijk een bakje koffie of thee. Vervolgens ga jij je voorbereiden op de stand-up van kwart voor 9. Zijn er bijvoorbeeld dingen waar jij nog tegen aan loopt? Of is er nog code die getest of gereviewd moet worden? Vervolgens starten jullie met de stand up en na de stand up zoeken jullie elkaar op en gaan jullie aan de slag. Als team met 6 developers werken jullie in drie wekelijkse sprints. Het einde van een sprint is altijd op een donderdag zodat jullie op vrijdag de demo

Bekijk vacature »

Infrastructure Developer

Vacature details Vakgebied: Software/IT Opleiding: Senior Werklocatie: Eindhoven Vacature ID: 12945 Introductie Our client is one of the most innovative companies within the Netherlands. Currently we are looking for an Infrastructure Platform Engineer. Within this role you will be developing the infrastructure. Functieomschrijving Within this role you are responsible in the development of our distributed data and compute platform infrastructure. You will design, develop and implement new features and fixes. Next to this you will integrate and configurate other packages that supports the development of tuning applications within the organisation. You will support customer sites remotely. Design and implement the

Bekijk vacature »

Front-end Developer

Gezellige team, passie en een groene toekomst! Lees hier de vacature van Front-end Developer bij All in Power! All in power heeft zich tot doel gesteld écht bij te dragen aan de energietransitie. Dit doen wij door de markt voor energie volledig op zijn kop te zetten. Producenten van schone (wind- of zonne-)energie verkopen via ons platform hun energie rechtstreeks aan gebruikers. Of dit nu huishoudens, bedrijven of bijvoorbeeld laadpalen zijn ons platform maakt het uitwisselen van energie mogelijk. Zo maken we de business case van onze klanten veel sterker en loont het om (meer) te investeren in vergroening voor

Bekijk vacature »

Delphi Programmeur

Functie omschrijving Onze opdrachtgever is gespecialiseerd in kantoor-bedrijfssoftware en zit gevestigd in omgeving Numansdorp. Als programmeur ben jij bij dit bedrijf met het volgende bezig; Je vertaalt technische en functionele ontwerpen naar kwalitatieve software. Je ontwikkelt, ontwerpt en test software. Je maakt daarbij veel gebruik met de volgende tools & technologieën: Delphi 10.3 (Rio), QuickReport 6. Je krijgt in deze rol veel vrijheid en verantwoordelijkheid. Je levert projecten van A - Z op, en werkt daarbij projectmatig en gestructureerd. Bedrijfsprofiel Dit bedrijf richt zich op maatwerk software oplossingen. Deze software oplossingen worden ingezet in de financiële branche. Het betreft een

Bekijk vacature »

Back end developer PHP

Functie Heb jij altijd al eens bij een bedrijf willen werken waar jij géén nummertje bent, die alleen maar uitvoerend werk doet? Dan zou je hier perfect passen! Tuurlijk, je werkt aan projecten voor grote of kleine bedrijven… Het enige verschil hier is, jouw mening telt hier écht. Jouw inbreng wordt gewaardeerd, serieus genomen en gebruikt. En vergeet niet, je werkt niet alleen aan deze projecten. Er werken in totaal ruim 25 developers en designers, onderverdeeld over 3 development teams. Voornamelijk bestaande uit Medior en Senior developers, die samen voor een inspirerende en ambitieuze omgeving zorgen. Hun visie is namelijk

Bekijk vacature »

Senior Front end developer Digital Agency

Functie Jij als Front end developer komt te werken in een van de 8 multidisciplinaire teams binnen de organisatie. Deze teams werken op basis van Scrum agile in 2 wekelijkse sprints. De grootte van de teams varieert van 9-14 collega’s en bestaan altijd uit één of meerdere project managers en een project manager. Samen met je team werk je aan verschillende projecten voor uiteenlopende klanten zoals grote multinationals tot het kleine mkb. De stack waarmee gewerkt wordt is voornamelijk Javascript, ES6, Es.next, HTML, CSS, React.js en Node.js. Wat deze organisatie onderscheid is dat ze echt langdurige partnerships aangaan met hun

Bekijk vacature »

Low Code Ontwikkelaar

In het kort Als Low Code Developer werk je aan projecten bij en voor onze klanten, waarbij je voor het ontwikkelen van de oplossingen een technisch low-code platform gebruikt. Samen met het team streef je naar de beste oplossing en bepalen jullie de juiste aanpak. Je rol is divers en je bent van begin tot eind betrokken bij de ontwikkeling zowel de back-end en de front-end van de applicatie. Naast de ontwikkeling en oplevering, breng je ook advies uit aan de klant waarom bepaalde keuzes worden gemaakt. Je bent dan ook communicatief sterk en kunt je keuzes goed (inhoudelijk) onderbouwen.

Bekijk vacature »

Senior pega developer

You work on software that makes colleagues and customers happy! Thanks to your IT skills, De Mandemakers Groep really makes a difference for its customers. Do coding, testing and deployments make your heart beat faster? Then apply today as Senior Pega Developer at De Mandemakers Groep! Wat ga je doen? The job title gives it away: You will be developing Pega software. This ranges from technical design, coding and testing to test automation, deployments and bug fixing. Your goal is to continuously improve our systems so that colleagues can work efficiently and customers receive optimal service. You don't have to

Bekijk vacature »

Database Developer

Functieomschrijving Heb jij ongeveer 3 jaar ervaring als Database Developer met MS SQL of een vergelijkbare database? Wil jij werken voor een gewaardeerde werkgever in regio Tilburg waar jij de tijd en ruimte krijgt jezelf te ontwikkelen? Lees dan snel verder! Hoe ziet jouw takenpakket eruit? Je houdt je bezig met het creëren en bouwen van MS SQL server databases; Je gaat projecten vanaf het begin tot het eind begeleiden. Je sluit aan bij meetings met klanten om hun processen in kaart te brengen. Vervolgens voer jij het project uit en zorgt dat dit zo goed mogelijk verloopt; Je werkt

Bekijk vacature »

Technical Asset Specialist Substations

TenneT is growing fast to realize its strategic ambitions. We play a leading role in driving the energy transition. We are looking for a passionate Technical Asset Specialist for substations (onshore and offshore) at our location in Arnhem who will contribute to this and that might be you? Your contribution to TenneT We are searching for a motivated and engaged colleague as a technical asset specialist (onshore and offshore) for instrument transformers and surge arresters, with preferably a strong background in the area of insulation coordination. As a specialist for insulation coordination you are responsible for overarching topics regarding insultation

Bekijk vacature »

SAP Integratie Ontwikkelaar

Ben jij ambitieus in de verdere ontwikkeling van SAP binnen HANOS, en heb je kennis van SAP PI, CPI (SAP integration suite) en of andere middleware tooling? Dan ben jij mogelijk onze nieuwe SAP Integratie (middleware) Ontwikkelaar! Lees snel verder en solliciteer! Wat ga je doen? Als SAP Financieel Consultant ben je, als deel van een gedreven team van interne SAP consultants, de schakel tussen de gebruikersorganisatie en ICT. Je draagt proactief bij aan een optimale aansluiting van de SAP-functionaliteit (een applicatielandschap met o.a. Suite on HANA, Fiori, Hybris, C4C en BO), op de bedrijfsprocessen. Verder ondersteun je de HANOS

Bekijk vacature »

Java Developer

Functieomschrijving Are you an experienced Java Developer who wants to be challenged? Then this is your job! As a Java Developer, you are co-responsible for building custom applications within our extensive IT landscape. Development takes place on both the back-end side (Spring/JEE). Together with the IT department, you are responsible for the daily adjustments and expansions of our IT systems. In addition, you will work in small scrum teams using the Agile methodologies. Besides the realization of our in-house systems, you are responsible for the roll-out of the application (version) as well as the operational support after going live. Team

Bekijk vacature »

Software Developer

Functie omschrijving Heb jij affiniteit met ICT en een WO diploma in de pocket? Dan ben je hier aan het juiste adres. Voor een opdrachtgever in Amsterdam zijn wij op zoek naar kandidaten die (enige) ervaring hebben met Java, Javascript, C of C++. Je zal door middel van trainingen worden opgeleid tot een volwaardige Software Developer. Er wordt tijdens de training natuurlijk veel aandacht besteedt aan de vaktechnische aspecten, maar er gaat ook veel aandacht uit naar jouw persoonlijke ontwikkeling. Bedrijfsprofiel Bij deze opdrachtgever in de omgeving van Amsterdam zoeken ze meerdere enthousiaste kandidaten die hun carrière willen starten met

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

30/11/2024 21:14:20
 
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.