PHP - problema para copiar un objecto DateTime

 
Vista:
sin imagen de perfil
Val: 76
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

problema para copiar un objecto DateTime

Publicado por jose luis (31 intervenciones) el 29/06/2020 00:22:12
hola tengo este codigo:
1
2
3
4
5
6
7
<?php
    $p2=new DateTime("2020/06/31T15:00:00");
    $p=$p2;
    $p->modify('+15 minute');
    $p=$p2;
    echo $p->format('H:i:s');
?>
la salida deberia de ser 15:00:00 ya que igualo $p = $p2 despues del incremento de minutos pero el resultado es 15:15:00. No entiendo donde esta fallando.
un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Julio
Val: 2.994
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

problema para copiar un objecto DateTime

Publicado por Julio (830 intervenciones) el 29/06/2020 00:28:30
Hola.

A mí siempre me ha pasado, siempre me he preguntado por qué el DateTime funciona así pero al final nunca he buscado el por qué.

Es como si el objeto DateTime que creas fuera una referencia en todas las variables que tengas asignadas sobre él. Por tanto, si haces eso que has hecho, tanto p como p2 apuntan al mismo objeto y las modificaciones que hagas en uno le afectan a otro.

¿Por qué lo hace así? La verdad, no lo sé. A ver si alguien más experto en este tema nos saca de dudas, pero la cuestión para ti ahora es que funciona así, es su comportamiento normal, así que no te está fallando.

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

problema para copiar un objecto DateTime

Publicado por Jose luis (31 intervenciones) el 29/06/2020 00:46:22
Lo que me gustaria es saber como puedo solucionarlo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de joel
Val: 2.841
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

problema para copiar un objecto DateTime

Publicado por joel (861 intervenciones) el 29/06/2020 08:35:06
A partir de PHP 5 los objetos se pasan por referencia, por lo que cuando haces una igualación, lo que haces es que las dos variables apunten el mismo objeto.
Para solucionar este problema existe "clone" https://www.php.net/manual/es/language.oop5.cloning.php

1
2
3
4
5
6
7
<?php
    $p2=new DateTime("2020/06/31T15:00:00");
    $p=clone $p2;
    $p->modify('+15 minute');
    $p=clone $p2;
    echo $p->format('H:i:s');
?>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 76
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

problema para copiar un objecto DateTime

Publicado por jose luis (31 intervenciones) el 29/06/2020 13:31:00
exacto asi lo hice, mil gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Fabian
Val: 166
Ha disminuido su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

problema para copiar un objecto DateTime

Publicado por Fabian (40 intervenciones) el 29/06/2020 12:59:20
proba esto:

1
2
3
4
5
6
7
8
9
10
<?php
    $p2=new DateTime("2020/06/31T15:00:00");
    $p=$p2;
    $p->modify('+15 minute');
    //define como null el objeto $p
    $p=null;
    ///
    $p=$p2;
    echo $p->format('H:i:s');
?>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 76
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

problema para copiar un objecto DateTime

Publicado por jose luis (31 intervenciones) el 29/06/2020 13:32:56
este no funciona
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar