![]() |
¿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. |
escribe aqui un caso de prueba de como estás verificando que el método no es llamado. saludos |
Debería funcionarte siempre y cuando llames a esa función desde una instancia de la clase: $variable = new A_clase; $variable->1(); |
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. |
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 |
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... :( |
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.