Property aanroepen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Java Developer (Training And Simulation)

Wat jij doet Je zou onze Java Developer zijn en nauw samenwerken met je Product Owner, Software System Engineer, Scrum Master en andere Developers. Samen draag je bij aan een multidisciplinair en zelf organiserend Agile team. De rol is zeer afwisselend en bestaat uit, maar is zeker niet beperkt tot: de-risk en prototype onbewezen simulatietechnologieën; simulatiekaders ontwikkelen voor gebruik door andere teams; je bent goed in het begrijpen van ingewikkelde ideeën; heeft de mogelijkheid om nauw samen te werken met grote internationale klanten, leveranciers en overheden om onze oplossingen, vastleggingsvereisten, enz. te definiëren en te presenteren. Ben jij het? Wij

Bekijk vacature »

PHP ontwikkelaar

Functie Met een complex en uitgebreid e-commerce platform, een eigen PIM-systeem en eigen scan applicatie – krijg jij dagelijks te zien hoe jouw werk gebruikt wordt door miljoenen gebruikers. En we staan qua development pas in de startblokken, aangezien er nog meerdere projecten op de plank liggen te wachten! Ons huidige development team bestaat uit 8 programmeurs. Er wordt dagelijks gereflecteerd op geschreven code, Scrum taken en kennisdelen onderling is een must. Onze voertaal binnen ons team is Engels, dit omdat wij twee internationale collega’s hebben. Ons huidige “IT Landschap” bestaat voornamelijk uit allerlei losse onderdelen die individueel, maar ook

Bekijk vacature »

.Net developer

Sogeti is een organisatie met een goede werksfeer en zo min mogelijk hiërarchische verhoudingen. Ga je bij ons als .Net Developer aan de slag? Dan werk je dagelijks met collega’s aan de mooiste IT-projecten. Deze snelgroeiende groep collega’s krijgt energie van hun vak en dat merk je op de werkvloer. Natuurlijk krijg jij de mogelijkheid je te certificeren. We organiseren regelmatig technische Meet-ups en doen we veel aan kennisdeling. Mede hierdoor zij wij dit jaar Microsoft Partner of the year geworden. Sogetisten staan klaar voor elkaar, hebben lol met elkaar en daarmee behalen we de mooiste resultaten! Werken bij Sogeti

Bekijk vacature »

Senior C# Software Ontwikkelaar te Zaandam

Bedrijfsomschrijving Deze werkgever heeft als missie om haar klanten op ICT-gebied volledig te ontzorgen. Ze zijn een ICT bedrijf met een verscheidenheid aan ICT oplossingen waaronder Cloud oplossingen en een groot deel van het werk is gericht op software realisatie. Voor de Enterprise-klanten voert het relatief kleine ontwikkelteam waar jij deel uit van kan gaan maken binnen deze organisatie te Zaandam de grootste opdrachten uit. Niet alleen websites en complexe webapplicaties maar ook mobile apps, web services en complete systeemintegraties! Je moet dan denken aan Dynamics, Sharepoint en Salesforce. Je komt hier terecht in een relatief kleine organisatie met ontzettend

Bekijk vacature »

.NET Developer

Dit ga je doen Binnen het team bouw je aan een applicatie met andere .Net Developers, testers een Product Owner en een Business Analyst. Met het team wordt de backlog besproken. In overleg claim jij jouw deel en zorgt ervoor dat onderhoud en innovatie wordt gerealiseerd. Het project dat momenteel draait is het opgraden van de omgeving. Doorontwikkelen van de huidige applicatie; Overleggen met teamleden om de backlog te verdelen; Onderhouden van de huidige omgeving; Sparren met de business en het ophalen van nieuwe requirements. Hier ga je werken De organisatie is een van de grootste landelijke aanbieder van diverse

Bekijk vacature »

Hands-on Solution Architect / Software Architect (

TenneT is hard groeiend om de onze ambities waar te kunnen maken. Zo nemen wij een leidende rol in het aanjagen van de energietransitie. Het werven van nieuw talent speelt daarin een cruciale rol. Wij zijn op zoek naar een gedreven Solution Architect / Software Architect op onze locatie Arnhem die hieraan wil bijdragen en misschien ben jij dat wel? Jouw bijdrage aan TenneT Je werkt samen met gedreven DevOps teams, bestaande uit frontend, backend en middleware developers, testers, UX-designers. Samen met de teams ben je continu op zoek naar de beste oplossingen voor onze klanten. Als Solution Architect onderzoek

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 »

Front-End React Developer

As a Front-End React Developer you improve the user-experience of our web applications for your colleagues in Coolblue. How do I become a Front-End React Developer at Coolblue? As a Front-End React Developer you are responsible for developing user interface components and implementing them using React.js concepts and workflows. You work with the UX Designer and get energy from coming up with creative solutions and present these within the team. During the day you gather and welcome feedback on your technical and soft skills. Would you like to become a Front-End React Developer at Coolblue? Read below if the job

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 »

Traineeship Full Stack .NET Developer

Dit ga je doen Start op 7 augustus bij de Experis Academy en ontwikkel jezelf tot een gewilde Full Stack .NET Developer. Maar hoe ziet het traineeship eruit en wat kun je verwachten? Periode 1 De eerste 3 maanden volg je fulltime, vanuit huis, een op maat gemaakte training in teamverband. Je leert belangrijke theorie en krijgt kennis van de benodigde vaardigheden en competenties die nodig zijn om de IT-arbeidsmarkt te betreden. Zowel zelfstandig als in teamverband voer je praktijkopdrachten op het gebied van front- en backend development uit. Wat er per week op het programma staat kun je hier

Bekijk vacature »

Starter/junior PHP developer

Functie Momenteel zijn ze op zoek naar een junior PHP developer om het team te versterken. Als back-end developer bouw je de enterprise software die hun bedrijf helpt bij haar primaire processen. Afhankelijk van de omvang van het project werk je in een klein team aan een project. Ze hebben dagelijkse stand-ups en elke twee weken een scrumsessie, begeleid door de Scrum Master, waar je je ideeën kunt presenteren en samen met de Product Owner kunt werken aan het beste product. Ze vertrouwen enorm op hun eigen bedrijfssoftware. Dit geeft hun een groot voordeel ten opzichte van hun concurrentie. Zo

Bekijk vacature »

Belastingdienst - Freelance Senior Cobol Applicati

Startdatum: 01.06.2023 Richttarief: €65,00 - €75,00 Duur van de opdracht: 7 maanden Uren per week: 36 Taal: Nederlands vereist! Gelieve in het Nederlands te solliciteren. Functieomschrijving: In de applicatie ETM zijn nu de inningsvoorzieningen voor ongeveer 25 aangifte- en aanslagmiddelen opgenomen. ETM is een extern aangeschafte service en het huidige contract met leverancier Oracle loopt af op 31-12-2022. Het programma uitfaseren ETM heeft als doel om vervanging te realiseren waarmee alle nu in gebruik zijnde ETM ondersteuning wordt overgenomen in nieuwe Inningsvoorzieningen om de continuïteit van de inningsprocessen te waarborgen. Eén van de inningsvoorzieningen die voor het einde van 31-12-2022

Bekijk vacature »

C# .NET Developer

Functie omschrijving C# .NET Developer gezocht. Ben jij een full stack developer die op zoek is naar een nieuwe uitdaging binnen een leuk snel groeiend bedrijf? Lees dan snel verder! Wij zijn op zoek naar een Developer met ervaring op het gebied van .NET die een organisatie in de regio Bennekom gaat versterken. Jij gaat je binnen dit bedrijf vooral bezighouden met het verbeteren van de functionaliteiten van hun dataplatform. Samen met andere ontwikkelaars denk je mee in oplossingsrichtingen, architectuur en nieuwe technologieën. Bedrijfsprofiel De organisatie waar je voor gaat werken heeft een onafhankelijk dataplatform ontwikkelt voor de agrarische sector.

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 »

Low Code Developer - Consultant

Functie omschrijving Wil jij fungeren als een spin in het web en samenwerken met klanten? Voor een leuke en interessante opdrachtgever in omgeving Leiden zijn wij op zoek naar een Low Code developer die zich bezig gaat houden met het optimaliseren van bedrijfsprocessen bij klanten en het leiden van projecten. Ben jij toe aan een nieuwe uitdaging en heb jij verstand van datamodellering en NO CODE Platformen? Lees dan snel verder! Bij deze rol horen de volgende werkzaamheden: Je gaat geen code kloppen maar bedenken hoe applicaties eruit moet komen te zien. Je gaat werken met een non code platform,

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

21/11/2024 17:42:26
 
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.