Property aanroepen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Fullstack developer

Functie omschrijving Ben jij toe aan een nieuwe uitdaging en zou jij graag bij een platte maar informele organisatie werken? Voor een mooi softwarebedrijf in omgeving Alblasserdam zijn wij op zoek naar versterking op de afdeling Software Development! Als Fullstack react.js developer wordt je bij dit bedrijf onderdeel van de volledige ontwikkeling van requirement tot oplevering! Jouw focus ligt op de front end en alles wat daarbij komt kijken. Je gaat ontwerpen, ontwikkelen, testen en valideren. Je zult voornamelijk werken met React.js en Typescript. Maar ook Javascript, HTML en CSS komen aanbod. Daarnaast zal je ook regelmatig met de back

Bekijk vacature »

Full Stack .NET Developer

Dit ga je doen Als developer nieuwe gave features ontwikkelen; Werken met technieken als C#, Angular 12 en Javascript,; Maken van technische keuzes en beslissingen over de architectuur; Junior collega's coachen; Initiatief nemen voor nieuwe technische mogelijkheden; Je bent een belangrijke schakel - en vindt het leuk - om te schakelen met de business. Hier ga je werken In een team van 7 professionals ben je als Full Stack .NET Developer verantwoordelijk voor het ontwikkelen van applicaties voor het grootste inhouse product: een applicatie voor alles omtrent hypotheken. De programmeertaal die je hierbij beheerst is C#. Wil je van meerwaarde

Bekijk vacature »

No-Code Betty Blocks ontwikkelaar

Bedrijfsomschrijving Wil jij de bedrijfsprocessen van klanten revolutionair digitaliseren en optimaliseren zonder beperkt te worden door programmeertalen? Kom werken bij een snelgroeiende en professionele organisatie met een gezonde dosis humor en veel vrijheid om jezelf te ontwikkelen. Als No-Code Betty Blocks ontwikkelaar werk je vanuit ons kantoor in het hart van Nederland, je thuiswerkplek of op locatie bij de klant. We faciliteren de juiste trainingen en ondersteuning zodat je een echte Betty Blocks expert wordt. Naast het werk zijn er bij ons bijzondere events, zoals een jaarlijkse zeildag, een zomerse barbecue en een knus kerstdiner om de grillige maanden door

Bekijk vacature »

Junior Front end developer Onderwijssoftware

Functie Als Junior front end developer kom jij terecht in een klein, maar hecht team bestaande uit 5 andere developers (waarvan 2 senioren, 2 medior en 1 junior). Met de gezamenlijke missie om “ieder kind te helpen met onze software” wordt er dagelijks gepassioneerd en hard gewerkt aan ons in-house ontwikkeld platform. Deze software is gebaseerd is op AI, machine Learning en wetenschappelijke inzichten. Dagelijks zul jij werken met onze high traffic webapplicatie. We hebben ruim 300.00 gebruikers en meer dan 2 miljard records waar je te maken mee krijgt! Verder zul jij je bezighouden met: – Het ontwikkelen van

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 »

C# Ontwikkelaar

Functieomschrijving Voor een software ontwikkelaar in de omgeving van Vught zijn we op zoek naar een gemotiveerde C# ontwikkelaar. Deel jij hun passie voor development en dan vooral in C#.NET? Dan kan dit wel eens jouw droombaan zijn! Jouw werkzaamheden zullen er ongeveer als volgt uit gaan zien Door de wensen van de klant goed te begrijpen ga jij aan de slag dit om te zetten naar passende oplossingen en werk je deze uit tot een sterk eindproduct. Je gaat je bezighouden met de ontwikkeling van webapplicaties en websites, dit doe je door middel van ASP.NET, MVC Frameworks en C#.

Bekijk vacature »

Medior Java developer

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 »

PHP developer (Symfony, Doctrine)

Functie Als PHP developer wordt er een hoge mate van zelfstandigheid verwacht, maar ook dat je goed opereert in een team waar kennis wordt gedeeld en dingen als codereviews erg veel voorkomen. Kwaliteit staat voorop, mede hierom werken ze bijvoorbeeld zonder echte deadlines in hun sprints. De SaaS-applicatie wordt volledig ontwikkeld in PHP en Symfony. De module bestaat uit een stuk informatie verrijking en intelligentie wat resulteert in een medische check. De logica wordt daarom in de code geïntrigeerd. Je bent onder andere bezig met complexe databases waar meer dan 80.000 medicijnen op verschillende niveaus in staan, die maandelijks worden

Bekijk vacature »

Software Developer C# - Deventer

Software Developer C# – Deventer Bijdragen aan de toekomst van het onderwijs! Ben jij op zoek naar een dynamische omgeving waar vol enthousiasme wordt gewerkt aan software voor interactieve dashboard- en analysetoepassingen ter verbetering van het onderwijs? Dan zijn wij het bedrijf voor jou! TIG is een bedrijf met een informele en ondernemende werksfeer, waarbij goede ideeën snel leiden tot concrete acties. Wij zijn een software ontwikkelorganisatie en focussen ons op het ontwikkelen en implementeren van oplossingen voor het leveren van managementinformatie, datavisualisatie en analyses voor het onderwijs. Met onze dashboard- en analyseoplossingen zetten scholen gegevens om naar betekenisvolle informatie.

Bekijk vacature »

Junior Back end developer PHP, Symfony

Functie Wij hebben onlangs onze eerste collega’s aangenomen, waardoor ons development team momenteel uit 4 personen bestaat. We bouwen onze software op basis van een PHP-framework (wat op zichzelf een Symfony framework is). Qua ontwikkeling focussen wij ons op 3 focus velden; – API-ontwikkeling/ Component Creatie – Implementatie – Framework ontwikkeling; het toevoegen van nieuwe functionaliteit of interne microservices Onze senior software engineer focust zich momenteel op de laatste twee punten, maar wij komen handen te kort op het eerste veld. Daarom zijn wij op zoek naar een enthousiaste junior software engineer die graag de kneepjes van het vak wil

Bekijk vacature »

Applicatie ontwikkelaar

Functie omschrijving Zelfstandige applicatie ontwikkelaar gezocht voor familiair bedrijf in omgeving Rotterdam! Ben jij op zoek naar een nieuwe uitdaging en zoek jij een informele werkgever waar je zelfstandig kunt werken binnen een leuk IT team, lees dan snel verder want wie weet zijn wij op zoek naar jou! Binnen deze rol houdt jij je met het volgende bezig: Onderhouden en ontwikkelen van de IT systemen; Opzetten van Azure Cloud systemen, denk aan interfaces, hardware op de Cloud, webportalen of BI functies; Werken aan scripts binnen verschillende software applicaties, denk aan ERP en CAD; Ontwikkelen en implementeren van MS PowerApps

Bekijk vacature »

Medior/Senior Software Developers gezocht in de Ra

Functie Op dit moment staan er posities open voor de volgende functies: Front-end, Back-End & Fullstack software developer. Als Front-End software developer werk je met JavaScript en de bijbehorende technologieën zoals TypeScript, Angular, React, Vue en Svelte. Als Back-End software developer ben je bezig in NodeJS en doe je dit met behulp van AWS, NoSQL, REST en GraphQL. Je krijgt leuke en uitdagende opdrachten met een gemiddelde duur van anderhalf jaar. Hier werk je in een team met andere IT’ers aan het ontwikkelen en verbeteren van software. Je wordt begeleid door een accountmanager die fungeert als jouw aanspreekpunt. Het team

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 »

Back end developer PHP, Laravel

Functie Jij komt te werken in ons webdevelopment team, wat bestaat uit 8 ervaren collega’s. Hiernaast hebben wij nog een team van 2 ontwikkelaars die aan native applicaties werken. Bij ons zijn er korte lijntjes en er hangt een gezellige informele werksfeer. Maar het belangrijkste is natuurlijk dat je aan geweldige applicaties zult gaan werken! Wij willen als organisatie niet te groot worden, we willen gewoon toffe dingen maken. Onze techstack bestaat momenteel uit: PHP, Laravel, Javascript, Typescript, Git, MySQL, Java, Kotlin, Xamarin. Samen met ons ga jij zorgen dat we puik werk leveren! Waarbij je bij elke fase in

Bekijk vacature »

PHP Developer Symfony

Dit ga je doen Ontwikkelen van Product Informatie Management (PIM) systemen; Werken aan zowel grotere als kleine projecten voor toonaangevende klanten binnen o.a. de retail. Hier ga je werken Als PHP Developer kom je te werken binnen een vooruitstrevende organisatie die Product Informatie Management (PIM) systemen levert aan hun klanten. Hun klanten zijn toonaangevende bedrijven binnen o.a. de retail. De organisatie zit gevestigd in regio Zwolle en bestaat uit zo'n 35 medewerkers, waarvan 30 IT. Je komt te werken binnen één van de zelfsturende development teams welke ieder verantwoordelijk zijn voor hun 'eigen' klanten. Jouw team bestaat uit 6 backend

Bekijk vacature »
Ozzie PHP

Ozzie PHP

24/01/2023 22:35:31
Quote Anchor link
Ik vraag me iets af. Als je binnen een method meerdere keren dezelfde property aanroept, biedt het dan een voordeel om die property binnen die method in een variabele op te slaan? Met voordeel bedoel ik, is het efficiënter? Of maakt het weinig verschil?

Je kunt dus dit doen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php

public function example() {
  $this->foo->doThis();
  $this->foo->doThat();
  if ($this->foo->count() > 5) {
    echo 'okay!';
  }
}


?>

Of dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php

public function example() {
  $foo = $this->foo;
  $foo->doThis();
  $foo->doThat();
  if ($foo->count() > 5) {
    echo 'okay!';
  }
}


?>

Maakt het iets uit?
Gewijzigd op 24/01/2023 22:36:38 door Ozzie PHP
 
PHP hulp

PHP hulp

22/12/2024 06:04:08
 
Jan Koehoorn

Jan Koehoorn

25/01/2023 08:04:49
Quote Anchor link
Deze geeft minimale verschillen, en het is ook niet steeds dezelfde methode die sneller is:
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<?php
$error_reporting_level
= E_ERROR | E_WARNING;

error_reporting($error_reporting_level);

$composer_autoload = __DIR__ . '/vendor/autoload.php';

if (file_exists($composer_autoload)) {
    require_once $composer_autoload;
}


class Foo
{
    public function doThat()
    {

        //
    }

    public function doThis()
    {

        //
    }

    public function printMe()
    {

        return 10;
    }
}


class Object1
{
    public $foo;

    public function __construct($foo)
    {

        $this->foo = $foo;
    }


    public function example1()
    {

        $this->foo->doThis();
        $this->foo->doThat();

        if ($this->foo->printMe() > 5) {
            echo 'ok';
        }
    }


    public function example2()
    {

        $foo = $this->foo;
        $foo->doThis();
        $foo->doThat();

        if ($foo->printMe() > 5) {
            echo 'ok';
        }
    }
}


$foo = new Foo;
$obj = new Object1($foo);

$start = microtime(true);
for ($i = 0; $i < 100000; $i++) {
    $obj->example1();
}

$stop = microtime(true);
dump($stop - $start);

$start = microtime(true);
for ($i = 0; $i < 100000; $i++) {
    $obj->example2();
}

$stop = microtime(true);
dump($stop - $start);
?>
Gewijzigd op 25/01/2023 08:06:20 door Jan Koehoorn
 
Ozzie PHP

Ozzie PHP

25/01/2023 10:15:24
Quote Anchor link
Dankjewel Jan!

Ik heb zelf ook even getest met jouw voorbeeld en het gaat inderdaad om minimale verschillen. Als je het aantal aanroepen per method ophoogt, dan zie je dat de 2e methode met de gekopieerde variabele (meestal) net iets sneller is. Het gaat dan uiteraard om micro-optimalisatie.

Ik was hier wel nieuwsgierig naar. Het scheelt dus niet veel, maar toch iets. Je zal er de oorlog niet mee winnen, maar als je dus een property binnen een method meerdere keren aanroept, kan het in ieder geval geen kwaad om een lokale variabele te gebruiken.
 
Ward van der Put
Moderator

Ward van der Put

25/01/2023 19:39:18
Quote Anchor link
Ozzie PHP op 24/01/2023 22:35:31:
Als je binnen een method meerdere keren dezelfde property aanroept, biedt het dan een voordeel om die property binnen die method in een variabele op te slaan?


Ik denk dat sommige Preciezen met opgeheven vinger naar het single-responsibility principle (SRP) zouden wijzen omdat zo'n methode al gauw te veel doet.

Ozzie PHP op 24/01/2023 22:35:31:
Je kunt dus dit doen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php

public function example() {
  $this->foo->doThis();
  $this->foo->doThat();
  if ($this->foo->count() > 5) {
    echo 'okay!';
  }
}


?>


Een methode in een klasse is geen applicatie, maar daar lijkt dit voorbeeld wel op.

Gelukkig reken ik mezelf meer tot de Rekkelijken. ;-) Als je performance belangrijk vindt, stap dan om te beginnen af van naïeve getters en setters. De snelheidswinst van directe toegang tot class properties is veel groter.
 
Ozzie PHP

Ozzie PHP

26/01/2023 14:35:17
Quote Anchor link
>> stap dan om te beginnen af van naïeve getters en setters.

Bedoel je daarmee om met public properties te werken?
 
Ward van der Put
Moderator

Ward van der Put

26/01/2023 15:52:56
Quote Anchor link
Ja.
 
Ozzie PHP

Ozzie PHP

26/01/2023 16:04:24
Quote Anchor link
Oké, maar daarmee introduceer je weer mogelijke andere nadelen. Dat is dus een beetje stuivertje wisselen.
 
Ward van der Put
Moderator

Ward van der Put

26/01/2023 16:42:28
Quote Anchor link
Met variabelen lokaal dupliceren introduceer je ook een nadeel: je verbruikt meer geheugen. Als je dit met een grote array doet, kan het zelfs fataal aflopen.

Je kunt deze trade-offs eigenlijk niet (gemakkelijk) eerlijk testen. Je gooit er nu meer geheugen tegenaan voor de snelheidswinst, maar dat is nadelig voor processen die je buiten de test laat. Eén proces voor één client wordt sneller, maar in een multithreaded multiprocessing omgeving met meerdere clients betaal je de prijs dan elders.

Er zijn bijvoorbeeld "oplossingen" die WordPress sneller maken: bij 1 of 2 bezoekers wordt de snelheid dan bijvoorbeeld meer dan verdubbeld, maar bij 10 of meer gelijktijdige bezoekers stort het kaartenhuis al in.
 
Ozzie PHP

Ozzie PHP

26/01/2023 17:18:13
Quote Anchor link
>> Met variabelen lokaal dupliceren introduceer je ook een nadeel: je verbruikt meer geheugen.

Eens. De snelheidswinst is ook niet bepaald spectaculair te noemen. Wellicht merk je er iets van bij een miljoen aanroepen, maar dat is in de praktijk niet realistisch.
 

26/01/2023 21:09:37
Quote Anchor link
Quote:
Als je binnen een method meerdere keren dezelfde property aanroept, biedt het dan een voordeel om die property binnen die method in een variabele op te slaan? Met voordeel bedoel ik, is het efficiënter?

Het antwoord is ja, het is efficiënter.

Door $this->foo op te slaan in een tijdelijke variabele $foo voorkomt je dat PHP elke keer een extra lookup moet doen naar het geheugenadres dat je eigenlijk wilt gebruiken. Ten koste van een extra pointer, dat wel. Hoe vaker je het geheugen benadert, via de property of een method, hoe meer je bespaart.
Een plek waar ik het gebruikte was in een HTML5-object dat een DOM-object extends.

Natuurlijk moet je wel opletten dat je alleen de pointer kopieert, en niet een heel object waar Ward voor waarschuwt. Dus geen 'deep copy', je wilt alleen maar de 'reference' kopiëren. Bijvoorbeeld met een array:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
$this
->foo = [1, 2];
$foo = $this->foo;  // deep copy
$foo[0] = 2;  // verandert alleen $foo
var_dump($foo);
$foo = &$this->foo;  // by reference
$foo[0] = 2;  // verandert ook $this->foo
var_dump($foo);
?>

Hoewel het voor zich zou moeten spreken, zet ik het er voor de zekerheid toch maar even bij.

Toevoeging op 26/01/2023 21:15:43:

Quote:
Met variabelen lokaal dupliceren introduceer je ook een nadeel: je verbruikt meer geheugen.

In dit geval gaat het om één geheugen pointer per variabele.
Ik heb het niet gecontroleerd voor PHP als geïnterpreteerde taal, maar normaal gesproken is een pointer gelijk aan de bitbreedte van je systeem. Een 64-bit machine gebruikt dan 8 bytes per pointer. Dat is echt geen probleem voor de hedendaagse machines met gigabytes aan werkgeheugen.
 
Ozzie PHP

Ozzie PHP

26/01/2023 22:48:16
Quote Anchor link
Hmmm, nu volg ik 'm niet meer helemaal. Als voorbeeld: stel je hebt een object en binnen dat object moet je database-bewerkingen kunnen uitvoeren. Je hebt een of andere database controller class gemaakt die je als property binnen het object instelt.

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 Foo {

private $db;

public function bar($id) {
  $db = $this->db;
  $db->setSql('SELECT ...');
  $db->setParam('id' => $id);
  $result = $db->execute();
  return $result;
}

}


?>

In dit voorbeeldje spreek ik 3 keer de database controller class aan. Ik sla die class op in de lokale variabele $db. Is die $db nu een pointer naar $this->db of is het een kopie van de database controller class? Ik zou denken dat laatste. Zodra de method is uitgevoerd, zou $db volgens mij weer opgeschoond moeten worden en is het geheugen weer leeg. Als ik by reference gebruik, dan verwijs ik toch nog steeds naar dezelfde pointer? Zou het dan juist niet performance kosten? Ik creëer dan namelijk een extra variabele, en bij iedere aanroep van die variabele moet de oorspronkelijke pointer (de class property) worden opgezocht zou ik denken.

Toevoeging op 27/01/2023 00:14:59:

UPDATE:

@Ward

>> Met variabelen lokaal dupliceren introduceer je ook een nadeel: je verbruikt meer geheugen.

Het lijkt erop dat als ik een variabele lokaal dupliceer het toch geen kopie betreft (en waarschijnlijk dus ook niet een verdubbeling van geheugen).

Ik heb hier een testje gemaakt met de onderstaande code:

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
<?php

class Bar {
    
    private $msg;
    
    public function test($msg) {
        $this->msg = $msg;
    }

    
    public function shout() {
        echo $this->msg;
    }
    
}


class Foo {
    
    private $bar;
    
    public function __construct($bar) {
        $this->bar = $bar;
    }

    
    public function say($msg) {
        $bar = $this->bar;
        $bar->test($msg);
        $this->bar->shout();
    }
    
}


$test_me = new Foo(new Bar);
$test_me->say('ha ha');

?>

Kijk naar de method 'say' in de class 'Foo'.

Ik kopieer hier d.m.v. $bar = $this->bar een class property naar een lokale variabele. Via deze lokale variabele stel ik de message ($msg) in. Vervolgens gebruik ik de class property (dus niet de lokale variabele) om de $msg weer te geven. Dat blijkt gewoon te werken. Klik hier voor het voorbeeld.

Blijkbaar verwijzen $bar en $this->bar naar hetzelfde object en wordt er dus helemaal niks gekopieerd. Of zie ik het nu verkeerd?
 
Ward van der Put
Moderator

Ward van der Put

27/01/2023 07:50:41
Quote Anchor link
$this->bar is hier inderdaad géén object maar een referentie (een reference of alias). Met $bar = $this->bar dupliceer je de referentie, niet het object.

Dat is anders wanneer je werkt met primitieven zoals arrays. Bijvoorbeeld na $server = $_SERVER is $server een complete array, geen referentie.

Als je wilt weten hoe codefragmenten omgaan met geheugengebruik, kun je dat met memory_get_usage() doormeten.
 
Ozzie PHP

Ozzie PHP

27/01/2023 09:41:26
Quote Anchor link
Kijk zo, wordt deze discussie (voor mij) steeds zinvoller. Dus met een lokale variabele dupliceer ik de referentie. Dat is goed om te weten.

N.a.v. jouw eerdere opmerking had ik al getest met memory_get_usage echter leverde dat (eindstand minus beginstand) telkens 0 op.

De vraag is nu wel ...

Ik kopieer dus via de lokale variabele de referentie naar een object. Toch werkt die lokale variabele iets sneller dan de class property. Ik ben wel benieuwd hoe dat dan kan. Is die lokale variabele een pointer naar de class property die naar het object verwijst? Of verwijst die lokale variabele rechtstreeks naar het object. Ik vermoed dan het laatste en dat zou ook de (zeer minieme) snelheidswinst kunnen verklaren.

Maar als ik het dus goed begrijp (ik hoor graag of dat mijn conclusie terecht is) kost het gebruik van een lokale variabele indien het gaat om een class property die verwijst naar een object géén extra significant geheugenverbruik, omdat het een pointer betreft naar hetzelfde object. Bij meerdere aanroepen binnen 1 method verlopen de aanroepen naar hetzelfde object via een lokale variabele ietsje sneller. Dus het kan zeker geen kwaad om bij meerdere aanroepen binnen 1 method gebruik te maken van een lokale variabele.
Gewijzigd op 27/01/2023 09:41:54 door Ozzie PHP
 

27/01/2023 10:15:46
Quote Anchor link
Het klopt wat je zegt Ward.
Maar wat ik (en anderen) missen is de logica van PHP waarom een array wel 'by value' wordt gekopieerd. Een array is immers geen primitief type:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
var_dump(is_scalar(array()));  // geeft false
?>

Gezien dat PHP afstamt van C, moet je het toch met me eens zijn dat dit gedrag onlogisch is. Scalars zijn primitieve typen, waarbij de value zo klein is dat het in een CPU register past, net als pointers (die op hun beurt weer geen PHP references zijn). Die values worden direct gekopieerd. In C geldt dit niet voor arrays en zelfs niet voor strings. Maar in PHP wel:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
$a
= "Test";
$b = $a;  // by value
$b .= ' 2';
var_dump($a);  // "Test"
$b = &$a;  // by reference
$b .= ' 2';
var_dump($a);  // "Test 2"
?>

PHP verbergt standaard vrij veel voor de programmeur, waardoor programma's al snel minder efficiënt worden dan ze zouden kunnen zijn. Het voorkomt ook fouten, vooral als programmeurs niet helemaal op de hoogte zijn van de details. Maar PHP zit er vol mee waardoor het veel minder simpel is dan het lijkt.
Gewijzigd op 27/01/2023 10:18:01 door
 



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.