Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

¿Por qué si llamo a la funcion desde fuera me lo hace bien y no desde dentro?

Estas en el tema de ¿Por qué si llamo a la funcion desde fuera me lo hace bien y no desde dentro? en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hay una funcion que la llamo desde la clase que la contiene desde otra funcion y no hace ni caso, pero si lo hago desde ...
  #1 (permalink)  
Antiguo 19/05/2005, 16:58
 
Fecha de Ingreso: julio-2004
Mensajes: 38
Antigüedad: 20 años, 5 meses
Puntos: 0
¿Por qué si llamo a la funcion desde fuera me lo hace bien y no desde dentro?

Hay una funcion que la llamo desde la clase que la contiene desde otra funcion y no hace ni caso, pero si lo hago desde la variable si que lo hace... me explico

<?php

class A_clase{

var $p = 0;

function 1(){
$this->2(); //asi no hace ni caso
}

function 2(){
$this->p = -5;
}

};

?>

(otro archivo php)

<?php

$variable = new A_clase;
$variable->2(); //asi si que funciona...

?>


-------------------------------------

No sé si me he explicado lo suficiente... es que no veo lógico lo que hace.

Saludos.
  #2 (permalink)  
Antiguo 20/05/2005, 08:12
Avatar de sism82  
Fecha de Ingreso: octubre-2003
Ubicación: Guadalajara
Mensajes: 865
Antigüedad: 21 años, 3 meses
Puntos: 1
escribe aqui un caso de prueba de como estás verificando que el método no es llamado.

saludos
  #3 (permalink)  
Antiguo 20/05/2005, 14:24
Avatar de living  
Fecha de Ingreso: mayo-2004
Mensajes: 1.266
Antigüedad: 20 años, 7 meses
Puntos: 2
Debería funcionarte siempre y cuando llames a esa función desde una instancia de la clase:

$variable = new A_clase;
$variable->1();
__________________
¿Te apasiona el mundo del guión? El portal del guión
  #4 (permalink)  
Antiguo 21/05/2005, 10:26
 
Fecha de Ingreso: julio-2004
Mensajes: 38
Antigüedad: 20 años, 5 meses
Puntos: 0
A ver... es que yo lo veo muy facil pero a lo mejor no lo es...

mi clase tiene 3 funciones... una de ellas es llamada desde fuera... y ésta llama a otras desde dentro. La primera llamada la realiza sin problemas, pero la primera no me devuelve nada a la clase :(

El código es una modificacion de una clase para recoger mails

Function RetrieveMessage($message,$lines)
{
$headers = "";
$body = "";
(...)
for($headers=$body=array(),$line=0;;$line++)
{
$response=$this->GetLine();
if(GetType($response)!="string")
return($this->SetError("Could not retrieve the message"));
switch($response)
{
case ".":
return("");
case "":
break 2;
default:
if(substr($response,0,1)==".")
$response=substr($response,1,strlen($response)-1);
break;
};
$headers[$line]=$response;
};
$this->DesglosaCabeceras($headers); //PRIMERA LLAMADA A UNA
for($line=0;;$line++)
{
$response=$this->GetLine();
if(GetType($response)!="string")
return($this->SetError("Could not retrieve the message"));
switch($response)
{
case ".":
return("");
default:
if(substr($response,0,1)==".")
$response=substr($response,1,strlen($response)-1);
break;
};
$body[$line] = $response;
};
$this->DesglosaCuerpo($body); //SEGUNDA LLAMADA A OTRA
return("");
}


function DesglosaCabeceras($cabeceras)
{
$this->cabecera['date'] = "";
$this->cabecera['from'] = "";
$this->cabecera['reply'] = "";
$this->cabecera['title'] = "";
$this->cabecera['content-type'] = "";
$this->cabecera['boundary'] = "";
//fin variables

for($linea=0;$linea < count($cabeceras);$linea++){
$this->cabecera['temp'] = HtmlSpecialChars($cabeceras[$linea]);
while( (substr($this->cabecera['temp'],0,1) == ' ') or (substr($this->cabecera['temp'],0,1) == "\t") ){
$this->cabecera['temp'] = substr($this->cabecera['temp'],1);
};
//FECHA RECEPCION
$busca = "Date:";
if($this->cabecera['date'] == ""){
if (substr($this->cabecera['temp'],0,5) == $busca){
$this->cabecera['date'] = substr($this->cabecera['temp'],6);
};
};
//DE QUIEN
$busca = "From:";
if($this->cabecera['from'] == ""){
if (substr($this->cabecera['temp'],0,5) == $busca){
$this->cabecera['from'] = substr($this->cabecera['temp'],6);
};
};
//RESPUESTA
$busca = "Reply-To:";
if($this->cabecera['reply'] == ""){
if (substr($this->cabecera['temp'],0,9) == $busca){
$this->cabecera['reply'] = substr($this->cabecera['temp'],10);
};
};
//TITULO
$busca = "Subject:";
if($this->cabecera['title'] == ""){
if (substr($this->cabecera['temp'],0,8) == $busca){
$this->cabecera['title'] = substr($this->cabecera['temp'],9);
};
};
//CONTENIDO DEL CORREO
$busca = "Content-Type:";
if($this->cabecera['content-type'] == ""){
if (substr($this->cabecera['temp'],0,13) == $busca){
$this->cabecera['content-type'] = strtok(substr($this->cabecera['temp'],14),";");
};
};
//PARTES DEL CORREO
$busca = "boundary=";
if($this->cabecera['boundary'] == ""){
if (substr($this->cabecera['temp'],0,9) == $busca){
$this->cabecera['boundary'] = substr($this->cabecera['temp'],15,(strlen($this->cabecera['temp'])-21));
};
};
};
if ($this->cabecera['date'] == ""){
$this->cabecera['date'] = "desconocida";
};
if ($this->cabecera['from'] == ""){
$this->cabecera['from'] = "desconocido";
};
if ($this->cabecera['reply'] == ""){
$this->cabecera['reply'] = $this->cabecera['from'];
};
//titulo nada
//content nada
//boundary nada
}

function DesglosaCuerpo($cuerpo)
{
$this->partes = -5;
//icr 190505
if( $this->cabecera['content-type'] == "multipart/mixed"){
$this->partes = 0;
$this->DesglosaMultiparte($cuerpo);
}else{
$this->partes = 1;
$this->parte[0]['content-type'] = $this->cabecera['content-type'];
for($linea = 0; $linea < count($cuerpo); $linea++){
$this->parte[0]['content'] .= $cuerpo[$linea]."\n";
};
};
}


************************************************** *******

La llamada a la funcion DesglosaCabeceras la realiza sin problemas, pero la llamada a DesglosaCuerpo no (es como si no entrara). La instancia en el caso de la funcion interior es $this, no? luego si funciona el $this->DesglosaCabeceras... mi duda es por qué no funciona el $this->DesglosaCuerpo...

Ah, un apunte... si realizo la llamada desde fuera de la clase, si que lo realiza, pero yo no quiero hacerlo desde fuera.

Saludos y gracias de antemano.

P.D.: Sé que existirá un gestor de correos, pero esto es algo personal para aprender a usar clases.
  #5 (permalink)  
Antiguo 21/05/2005, 10:30
 
Fecha de Ingreso: julio-2004
Mensajes: 38
Antigüedad: 20 años, 5 meses
Puntos: 0
Por cierto, estoy usando la version de PHP 4.3.9 y no puedo cambiarla... por si decís que esto en la 5 funciona :S
  #6 (permalink)  
Antiguo 21/05/2005, 10:41
 
Fecha de Ingreso: julio-2004
Mensajes: 38
Antigüedad: 20 años, 5 meses
Puntos: 0
Vale, acabo de descubrir que es porque se mete en un return antes... pero metiendo esa llamada antes del return... me sigue fallando otra llamada... :(
  #7 (permalink)  
Antiguo 21/05/2005, 11:15
 
Fecha de Ingreso: julio-2004
Mensajes: 38
Antigüedad: 20 años, 5 meses
Puntos: 0
Ya me funciona... muchas gracias de todos modos por la atencion... fue un problema mio de trazar las salidas (returns y demas).

Saludos
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 02:46.