Foros del Web » Programando para Internet » PHP »

namespaces, clases y extensiones

Estas en el tema de namespaces, clases y extensiones en el foro de PHP en Foros del Web. echo se muestra 2 veces en vez de una Mi versión de PHP es la 5.6.11 con lo que supongo que la Función Bar debería ...
  #1 (permalink)  
Antiguo 10/03/2016, 15:07
 
Fecha de Ingreso: enero-2008
Mensajes: 581
Antigüedad: 16 años, 11 meses
Puntos: 9
namespaces, clases y extensiones

echo se muestra 2 veces en vez de una

Mi versión de PHP es la 5.6.11 con lo que supongo que la Función Bar debería ser un método y no un constructor como dice el manual

En el ejemplo de la guía (http://php.net/manual/es/language.oop5.decon.php)
Código PHP:
namespace Foo;
class 
Bar {
    public function 
Bar() {
        
// Tratado como constructor en PHP 5.3.0 - 5.3.2
        // Tratado como método regular a partir de PHP 5.3.3
    
}

Al des-comentar namespace no me sale en nada en pantalla
El siguiente código me devuelve 2 veces el echo
Código PHP:
<?php
//namespace Foo;
class Bar {
    public function 
Bar() {
        echo 
'asd';
    }
}
class 
extends Bar{}

$obj = new Bar();
$obj->Bar(); //Debuelve asdasd ¿Porque dos veces?

$obj = new a();
$obj->a(); //Debuelve asd ¿Por que una vez?
?>
  #2 (permalink)  
Antiguo 11/03/2016, 00:16
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 8 meses
Puntos: 2534
Respuesta: namespaces, clases y extensiones

Pues tienes razón, probé ambos casos y obtengo los mismos resultados.

¿Por qué?

No tengo la menor idea, deberías consultarlo con los desarrolladores de PHP en sí mismo, no es algo que venga detallado en el manual.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 11/03/2016, 02:48
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 14 años, 2 meses
Puntos: 123
Respuesta: namespaces, clases y extensiones

Supongo que puede ser por esto.
Básicamente que hasta php 7 no se elimina completamente el método antiguo del constructor por temas de retrocompatibilidad.

Cita:
Por motivos de retrocompatibilidad con PHP 3 y PHP 4, si PHP no puede encontrar una función __construct() de una clase dada, y la clase no hereda uno de una clase madre, se buscará la función constructora del estilo antiguo, por el nombre de la clase. Efectivamente, esto significa que en el único caso en el que se tendría compatibilidad es si la clase tiene un método llamado __construct() que fuese utilizado para diferentes semáticas.

Advertencia
Los constructores del estilo antiguo están OBSOLETOS en PHP 7.0, por lo que serán eliminados en una futura versión. Se debería utilizar siempre __construct() en código nuevo.

Etiquetas: clases, extensiones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:07.