Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Frameworks y PHP orientado a objetos (http://www.forosdelweb.com/f68/)
-   -   ¿Por qué si llamo a la funcion desde fuera me lo hace bien y no desde dentro? (http://www.forosdelweb.com/f68/por-que-si-llamo-funcion-desde-fuera-hace-bien-no-desde-dentro-299893/)

iraklis 19/05/2005 16:58

¿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.

sism82 20/05/2005 08:12

escribe aqui un caso de prueba de como estás verificando que el método no es llamado.

saludos

living 20/05/2005 14:24

Debería funcionarte siempre y cuando llames a esa función desde una instancia de la clase:

$variable = new A_clase;
$variable->1();

iraklis 21/05/2005 10:26

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 21/05/2005 10:30

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 21/05/2005 10:41

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 21/05/2005 11:15

Ya me funciona... muchas gracias de todos modos por la atencion... fue un problema mio de trazar las salidas (returns y demas).

Saludos


La zona horaria es GMT -6. Ahora son las 10:35.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.