DateTime naar functie sturen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Manu Laureys

Manu Laureys

02/12/2016 14:45:05
Quote Anchor link
IK heb een datetime die ik naar een functie stuur en daar wijzig. Als ik terug kom uit de functie is mijn oorspronkelijke datetime ook gewijzigd. Hoe kan dat?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$SessionDate
= new DateTime("2016-11-01");
  $MyKalender = new Kalender();
  print "<br>1) ";
  print $SessionDate->format("d/m/Y"); // 01/11/2016
  $MyKalender->GetKalData($SessionDate, $PersoonID);
  print "<br>2) ";
  print $SessionDate->format("d/m/Y"); // 01/12/2016
  $MyKalender->DisplayKalender($SessionDate);
  print "<br>3) ";
  print $SessionDate->format("d/m/Y"); // 01/12/2016
?>

- Ariën -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Gewijzigd op 02/12/2016 14:54:44 door - Ariën -
 
PHP hulp

PHP hulp

27/11/2024 05:48:23
 
- Ariën  -
Beheerder

- Ariën -

02/12/2016 14:53:32
Quote Anchor link
Dit topic lijkt behoorlijk op je vraag ;-)
http://www.helpmij.nl/forum/showthread.php/905453-Datetime-naar-functie-sturen

Was je die soms vergeten? Want er staan aardige antwoorden in.
Gewijzigd op 02/12/2016 14:54:12 door - Ariën -
 
Manu Laureys

Manu Laureys

02/12/2016 14:55:40
Quote Anchor link
Dat is ook mijn vraag. Maar ik heb nog steeds geen antwoord.
 
Ben van Velzen

Ben van Velzen

02/12/2016 15:55:12
Quote Anchor link
Jawel, dat heb je wel. Je datum wordt by reference meegegeven en daardoor kan de functie je datum wijzigen. De oplossing is om deze te clonen, of zoals genoemd in dat topic te serializen en te unserializen.
 
Thomas van den Heuvel

Thomas van den Heuvel

02/12/2016 17:07:07
Quote Anchor link
Of zorgen dat je deze inhoudelijk niet wijzigt in de implementatie van GetKalData().

Dit is duidelijk niet de bedoeling = ongewest gedrag = bug.

Je bouwt in feite een nieuwe datum, creeer dan ook een nieuw datum-object.

En ja, als je het principe van call by reference bijster bent dan zul je nog voor veel onverklaarbaar gedrag komen te staan als je met classes en objecten werkt.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

03/12/2016 11:06:20
Quote Anchor link
Manu, ik vind dat je een hele goede en logische vraag stelt.

PHP gaat bij objecten "Opeens" variabelen 'by Reference' gebruiken waar bij alle andere variabelen zoals strings, array's en integers variabelen 'by Value' gebruikt worden. PHP is hierin erg onduidelijk.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php

$vandaag
= new \DateTime();

?>


De vraag die je zou kunnen stellen wat zit er in de variabele $vandaag ?

Antwoord: een verwijzing naar een bepaalde plek in het RAM geheugen van je computer. In de programmeertaal C zouden ze dat een pointer noemen. Dit is ook tevens de reden van het keyword new. Dit keyword reserveert ook daadwerkelijk een stuk geheugen elders op je pc en maakt daar een nieuw DateTime object in en geef het adres van dit stuk geheugen terug.

Als je dan vervolgens dit doet:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$copy
= $vandaag;
?>


Dan kopieer je dus geen object maar enkel de verwijzing naar het object (Het geheugenadres dus). Immers om een nieuw object te maken moet je het keyword new gebruiken.

Zoals hierboven reeds vermeld kun je eventueel een object clonen. Informatie hierover vindt je hier.
 
Manu Laureys

Manu Laureys

03/12/2016 12:26:00
Quote Anchor link
Bedankt.

Ik wist niet dat een object, datetime dus, by reference werd doorgegeven. Ik dacht dat alles by value was.
 



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.