Comunidad de diseño web y desarrollo en internet online

Problema con REQUIRE, INCLUDE y AMFPHP Help Me

Citar            
MensajeEscrito el 18 Nov 2010 04:07 pm
Hola a todos,
Tengo un problema que no se como resolver y no encuentro informacion al respecto estoy bastante desesperado

expongo un ejemplo sencillo para si alguien sabe alguna solucion


Tengo 2 php dentro de la carpeta services de AMFPHP

El primero se llama llamarSaludo.php
y el otro saludar.php

En el primer php tengo un simple clase que importa el segundo fichero php tal que asi

Código PHP :

<?php
class llamarSaludo{
       function incluir(){
   require 'saludar.php';
         }
}//end class
?>


Y en el segundo archivo saludar.php tengo un simple return "hola";

Código PHP :

<?php
return "hola";
?>


El problema es que cuando ejecuto la clase desde el browser de AMFPHP
me devuelve (null) y deberia devolverme "hola"
y eso me pasa con todo, si desde el archivo importado intento acceder a alguna variable de la clase
me devuelve tambien null
tampoco puedo llamar a una funcion del fichero principal

y necesito importar los fihceros php externos

Necesito importar ficheros externos y que estos accedan a cualquier variable o funcion de la clase que lo importa porque
tengo un php que se encargar de imprimir documentos pdf con FPDF al cual yo le digo imprimeme los documentos 1, 4 , 10 ,30
entonces dentro del php hay sentencias if que comparan los valores recibidos
si se a recibido el 1 entonces importa el php que se encargar de realizar las consultas y montar la pagina del documento 1
y asi con todos los documentos para luego guardar en el servidor un unico pdf con los documentos seleccionados

y son como 45 ficheros php encargados de crear anexos de documentos

la unica solucion que se me a ocurrido es meter el codigo de todos los php directamente dentro de la clase para que puedan tener acceso a las variables de la clase pero me quedaria un php muy bestia de codigo y seria una locura

Por giskard

110 de clabLevel



Genero:Masculino  

Programador y diseñador web

msie8
Citar            
MensajeEscrito el 18 Nov 2010 06:42 pm
Tienes que pensarlo en el sentido de objetos, no como corta/pega de código. Si tienes una clase que imprime PDF, genera una instancia dentro de la clase de PHP y úsala dentro de los métodos, el require tal cual lo expones no tiene ningún sentido

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 19 Nov 2010 07:13 am
gracias por la respuesta solrag lo entiendo, convertire en clases todos los ficheros, es que era un proyecto que empece a hacerlo usando loadVars y sin clases de php y actualmente estoy migrando todas las conexiones con amfphp

lo que no entiendo es porque hay otros requires que si funcionan dentro del mismo fichero, tengo 2 requires que cargan 2 ficheros php sin ser clases y que se encargan de realizar la conexion con la bdd y decodificar la sesion y funcionan perfectamente pero lo raro es que a partir de esos 2 los siguientes que se encuentran dentro de sentencias if no funcionan eso es lo que me hizo confundirme, te pongo un trocito del codigo para que lo veas, los 2 requires que funcionan estan al principio y los que fallan los veras al final del codigo, por si te apetece explicar porque sucede, saludos y gracias por la respuesta.

Código PHP :

class impSelecDocs{
function imprimir($cd,$idrE_php,$documentosArr){

$s = $this->_getC();
   $s.= $cd;
         require '../../dc/sesionDecode.php';
            $sesion = decode($s);
            if($sesion == true){
                         require '../../dc/dc.php';
   $dS = explode(";", $documentosArr);
//COMPROBADOR DE LOS DOCUMENTOS SELECCIONADOS
$todaDoc = false;
if($dS[0] == "TD"){
   $todaDoc = true;
}
function existe($doc, $dS){
   $succes = false;
   for ($n=0; $n < count($dS); $n++) {
      if($dS[$n] == $doc){
         $succes = true;
         break;
      }else{
         $succes = false;
      }
      }
   if($succes){
      return true;
   }else{
      return false;
   }
   }
//---------------------------------------------------Una tabla más completa
function ImprovedTable($header1,$datax){
global $pdfTags;
$B = '';
$B2 = 'B';
$n = 7;
$w = array(74,14,74,14,14);
for($i=0;$i < count($header1);$i++){
   $pdfTags->SetFont('Arial','B',7);
$pdfTags->Cell($w[$i],3,$header1[$i],1,0,'C');
}
$pdfTags->Ln();
foreach ($datax as $rowx) {
   if($B == 'B'){$B = '';$B2 = 'B';$n = 7;}else{$B = 'B';$B2 = '';$n = 7;}
   $pdfTags->SetFont('Arial',$B,$n);
for($e=0;$e < count($header1);$e++){
   
$pdfTags->Cell($w[$e],4,$rowx[$e],'LR'.$B2);

}
$pdfTags->Ln();
}
$pdfTags->Cell(array_sum($w),0,'','T');
}
//-------------------------------------------------CONSULTAS
$cons = "SELECT razon,dir,cp,loc,ger1 FROM clientes where id='$idrE_php'";
$res = mysql_query($cons);
while ($row = mysql_fetch_row($res)){
   $NombreEmpresa = $row[0];
   $direccionEmpresa = $row[1];
   $cp = $row[2];
   $loc = $row[3];
   $gerente = $row[4];
}
//----------------------------------------------RECUPERAR FECHA
 $timer = time();
 $dia = date('d',$timer);
 $mes = date('m',$timer);
 $año = date('Y',$timer);
//----------------------------------------------CARGA DE LAS LIBRERIAS FPDF
//define the Paragraph String ~~ Required by Multicell Class
define('PARAGRAPH_STRING', '~~~');

//Tag Based Multicell Class
require("../../fpdf/multicelltag/class.multicelltag.php");
$pdfTags = new fpdf_multicelltag();
$pdfTags->Open();
$pdfTags->AliasNbPages(); 
$pdfTags->SetTextColor(0,0,0);
$pdfTags->SetFillColor(254,255,245);
$pdfTags->SetLeftMargin(15); 
$pdfTags->SetStyle("p","arial","",13,"0,0,0");
$pdfTags->SetStyle("p2","arial","",15,"0,0,0");
$pdfTags->SetStyle("pb","arial","B",8,"0,0,0");
$pdfTags->SetStyle("negSub","arial","BU",8,"0,0,0");
$pdfTags->SetStyle("t1","arial","B",10,"80,80,260");//azul
$pdfTags->SetStyle("t3","times","B",14,"203,0,48");
$pdfTags->SetStyle("t4","arial","B",10,"0,0,0");
$pdfTags->SetStyle("hh","times","B",11,"255,189,12");
$pdfTags->SetStyle("ss","arial","",7,"203,0,48");
$pdfTags->SetStyle("font","helvetica","",10,"0,0,255");
$pdfTags->SetStyle("style","helvetica","BI",10,"0,0,220");
$pdfTags->SetStyle("size","times","BI",13,"0,0,120");
$pdfTags->SetStyle("color","times","BI",13,"0,255,255");
$pdfTags->SetFont('Arial','',8);
$pdfTags->SetAutoPageBreak(true, 1);

   
//--------------------------------------------------------------------------------DOCUMENTO DE SEGURIDAD
if(existe('DS', $dS) || $todaDoc){
//$fecha = date('dmY',$timer);
//Class Extention for header and footer
//require_once("header_footer.inc");
//$pdfTags->SetMargins(20, 20, 20);
//$pdfTags->SetFont('Arial','B',11); 
//$pdfTags->MultiCell(0,4,"",0,1,'L',false);
//$pdfTags->Ln();
require 'impSelecDocs/01_docSeg.php';
}
//-----------------------------------------------------------------------------------------INDICE DE LOS ANEXOS
if(existe('IA', $dS) || $todaDoc){
   require 'impSelecDocs/02_Indice.php';
}
//-----------------------------------------------------------------------------------------ANEXO A
if(existe('AA', $dS) || $todaDoc){
   require 'impSelecDocs/03_AnexoA.php';
}
//-----------------------------------------------------------------------------------------ANEXO B
if(existe('AB', $dS) || $todaDoc){
   require 'impSelecDocs/04_AnexoB.php';
}
//-----------------------------------------------------------------------------------------ANEXO C

continua el codigo....

}//End Session
}//End class

Por giskard

110 de clabLevel



Genero:Masculino  

Programador y diseñador web

msie8
Citar            
MensajeEscrito el 19 Nov 2010 10:06 am
He echo una prueba cargando clases y me sigue ocurriendo lo mismo

desde el php principal cargo la clase creo una nueva instancia de la clase y llamo a la funcion de la clase pasandole un valor por parametro, despues en la clase del segundo php tengo un simple return que siempre me devuelve (null) desde el browser de AMFPHP


Código PHP :

class prueba(){
function call(){
$valor = 40;
$todaDoc = true;
if($todaDoc){
require("impSelecDocs/class.A15_AnexoG4S.php");
$AG4S = new A15_AnexoG4S();
$AG4S->addPage($valor);
}//end if
}//end call
}//end class


el php con la clase cargada contiene

Código PHP :

class A15_AnexoG4S{
function addPage($valor){
   return $valor; //devuelve null;
}//End addPage
}//End class

Por giskard

110 de clabLevel



Genero:Masculino  

Programador y diseñador web

msie8
Citar            
MensajeEscrito el 19 Nov 2010 11:26 am
Los unicos require o include son de datos que se quiere mantener separado por algún motivo, típicamente conexiones a BD, el resto tienen que ser otras clases. Tu code es un poco largo, pero parece como que desparramaste código por un montón de ficheros siguiendo algún tipo de lógica procedural. Básicamente no funcionará porque a menos que sean solo datos, es decir valores que se usan, los comandos no se importan sino las funciones y las clases en si.
Unifica en clases, importa clases, llama métodos en instancias de las clases.
Si quieres detalles de por que no funciona, postea en el foro de PHP, no es algo específico de PHP sino un error conceptual en cuanto a objetos

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 19 Nov 2010 02:47 pm
gracias por responder, al final lo he solucionado,
cometia el error de poner el return directamente en la clase cargada y no funciona

la solucion es desde las clase crear una funcion que retorne el valor pasado por parametro

function send($valor){
return $valor;
}

y desde la clase principal

$object->send("hola mundo");

saludos

Por giskard

110 de clabLevel



Genero:Masculino  

Programador y diseñador web

msie8

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.