Retroceder   Foros del Web > Programación para sitios web > PHP > PHP orientado a objetos

Respuesta
 
Herramientas Desplegado
Antiguo 19-may-2005, 16:58   #1 (permalink)
iraklis ha deshabilitado el karma
 
Fecha de Ingreso: julio-2004
Mensajes: 37
¿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.
iraklis está desconectado   Responder Citando
Antiguo 20-may-2005, 08:12   #2 (permalink)
sism82 ha deshabilitado el karma
 
Avatar de sism82
 
Fecha de Ingreso: octubre-2003
Ubicación: Guadalajara
Mensajes: 865
Enviar un mensaje por MSN a sism82 Enviar un mensaje por Yahoo  a sism82
escribe aqui un caso de prueba de como estás verificando que el método no es llamado.

saludos
__________________
Se debe llamar GNU/Linux, no solamente Linux, mas info en: http://www.gnu.org/gnu/gnu-linux-faq.es.html
sism82 está desconectado   Responder Citando
Antiguo 20-may-2005, 14:24   #3 (permalink)
living está en el buen camino
 
Avatar de living
 
Fecha de Ingreso: mayo-2004
Mensajes: 1.266
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
living está desconectado   Responder Citando
Antiguo 21-may-2005, 10:26   #4 (permalink)
iraklis ha deshabilitado el karma
 
Fecha de Ingreso: julio-2004
Mensajes: 37
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.
iraklis está desconectado   Responder Citando
Antiguo 21-may-2005, 10:30   #5 (permalink)
iraklis ha deshabilitado el karma
 
Fecha de Ingreso: julio-2004
Mensajes: 37
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
iraklis está desconectado   Responder Citando
Antiguo 21-may-2005, 10:41   #6 (permalink)
iraklis ha deshabilitado el karma
 
Fecha de Ingreso: julio-2004
Mensajes: 37
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... :(
iraklis está desconectado   Responder Citando
Antiguo 21-may-2005, 11:15   #7 (permalink)
iraklis ha deshabilitado el karma
 
Fecha de Ingreso: julio-2004
Mensajes: 37
Ya me funciona... muchas gracias de todos modos por la atencion... fue un problema mio de trazar las salidas (returns y demas).

Saludos
iraklis está desconectado   Responder Citando
Respuesta

No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 05:36.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

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 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93