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

Ayuda con clases y funciones

Estas en el tema de Ayuda con clases y funciones en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Saludos Colegas... Estoy tratando de realizar una clase de conexión con informix y mssql la cual quedaria así en un archivo cnn.php <? class conexion ...
  #1 (permalink)  
Antiguo 19/09/2006, 07:08
Avatar de Mulato  
Fecha de Ingreso: diciembre-2001
Ubicación: Caracas
Mensajes: 158
Antigüedad: 22 años, 4 meses
Puntos: 0
Sonrisa Ayuda con clases y funciones

Saludos Colegas...

Estoy tratando de realizar una clase de conexión con informix y mssql la cual quedaria así en un archivo cnn.php
<?
class conexion {
function mssql() {
$cnn_sql = mssql_connect('server\serverone','usuario','clave' );
$db_sql = mssql_select_db ( 'basededatos', $cnn_sql );
}
function informix() {
$cnn_ifx = ifx_connect('bd@informix','usuario','clave') or die(ifx_error());
}
}
?>

Y en otro archivo realizar el llamado de la función mssql para realizar la consulta...

<?
//Se realiza la conexión...
include_once '../../conexiones/cnn.php';

$conexion = new conexion;
$conexion->mssql ();
$cnn_sql->cnn_sql();

//Realiza una consulta para listar la habilidad...
$sqltp_pers= ("SELECT cod_tp_pers, desc_tp_pers FROM tp_personal");
$sql_tp_pers=mssql_query($sqltp_pers, $cnn_sql);
?>
El problema es que hasta aquí llego, porque me da error y soy muy novato para entender que estoy haciendo mal... Agradezco la paciencia y una comprensible respuesta...
__________________
Necesito aprender para compartir mi saber...
  #2 (permalink)  
Antiguo 19/09/2006, 10:25
Avatar de Hollman  
Fecha de Ingreso: enero-2003
Ubicación: Bogotá - Colombia
Mensajes: 202
Antigüedad: 21 años, 3 meses
Puntos: 1
Hola...


1. Que hace la sentencia $cnn_sql->cnn_sql(); ????
2. La variable $cnn_sql en la sentencia

$sql_tp_pers=mssql_query($sqltp_pers, $cnn_sql);

Tu quieres que haga referencia a la de la classe (cierto?). En caso de ser así, te recuerdo que esas variables funcionan dentro de la classe, si quieres que sea la misma que guarda el iden. de conexion a mssql tienes que hacer un método que te retorne el iden. de conexion y colocarlo en la sentencia, algo así como

$sql_tp_pers=mssql_query($sqltp_pers, $conexion->get_id_mssql());

y en la classe conexion..

function get_id_mssql()
{ return $cnn_sql; }


3. Estas mezclando 2 tipos de programación de mala manera, OOP y no OOP. Si deseas hacer una aplicacion que meneje multiples tipos de BD te recominendo usar capa de Abstraccion de BD como lo son ADOdb o PEAR:DB

Éxitos
  #3 (permalink)  
Antiguo 19/09/2006, 14:40
Avatar de Mulato  
Fecha de Ingreso: diciembre-2001
Ubicación: Caracas
Mensajes: 158
Antigüedad: 22 años, 4 meses
Puntos: 0
Dispensa la terquedad...

Pero no entendi a que te refieres con ADOdb o PEAR:DB, porque no estoy haciendo conexiones locales, aunque la de Informix si lo es, algo asi como OLEDB ahora estas son funciones propias de PHP..??? si es posible me corrijas la sentencia que coloque porque quede en la misma..!!!

Mi intencion seria llamar la función de conexion tanto para informix como para SQLServer desde cualquier archivo.php...

Gracias por tu respuesta...
__________________
Necesito aprender para compartir mi saber...
  #4 (permalink)  
Antiguo 20/09/2006, 06:25
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
AdoDB y PEAR son "capas de abstracción de Base de datos". Se usan para acceder a tus BBDD (varias) sin tener que cambiar tu código si usas una u otra BBDD en tu aplicación.

Eso sería la capa de "datos" por decirlo así, .. luego tu diseñarías tu "capa de negocios" donde tus objetos los "extiendas" con la capa de abstracción que quieras usar y así no creas dependencia directa de tu código própio de tu aplicación uses o la BBDD que uses.

Igualmente estas "capas" necesitan de su soporte "base" de extenisones de PHP, por ejemplo si dan soporte a ODBC necesitaras instalar las extensiones de ODBC para PHP (www.php.net/odbc), si acceden a SQL Server lo mismo (www.php.net/mssql) o bien lo accedes por ODBC (por el "cuello" de botella de OBDC).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 20/09/2006, 07:44
Avatar de Mulato  
Fecha de Ingreso: diciembre-2001
Ubicación: Caracas
Mensajes: 158
Antigüedad: 22 años, 4 meses
Puntos: 0
OK, yo lo conozco como modelo de 3 capas, y así es como programo, lo que pasa es que en Visual.Net una clase, es una clase, un WEBService es un xml y no un archivo.php con una función llamada clase..¿?.. etc, pero bueno, tengo que migrar obligatoriamente y eso significa empezar de nuevo conservando el esquema, he allí el porque de mi pregunta porque la idea es crear las funciones para llamarlas cuando las necesito la conexión a la BD en una capa (cnn.php), mi "capa de negocios" estaría en otra capa (select.php), etc... Ahora las capas a las que te refieres son los archivos .php verdad, donde estan las rutinas separadas y luego las incluyes entre los archivos... Eso es una vieja practica usada en ASP. o es que hay otra forma de declarar las extenciones que yo ignoro..? algo así como un .dll

Al fin de cuentas no he logrado hacer funcionar la función ni la clase, seguire intentando...
__________________
Necesito aprender para compartir mi saber...
  #6 (permalink)  
Antiguo 22/09/2006, 12:42
Avatar de Mulato  
Fecha de Ingreso: diciembre-2001
Ubicación: Caracas
Mensajes: 158
Antigüedad: 22 años, 4 meses
Puntos: 0
Caramba, o estoy muy pelin con eso de las funciones y las clase o tengo el cegatus cronicus.. No puedo hacer funcionar la clase y la función Ayudenme....!!!!

archivo cnn_conexion.php
<?
class cnn {
//Se crea conexión a la BD y se guarda en una variable...
function ifxcnn (){
$cnnifx = ifx_connect('basededatos@servidor','usuario','clav e') or die(ifx_error());
return $cnnifx;
}
//Se crea conexión a la BD y se guarda en una variable...
function mssqlcnn (){
$cnnsql = mssql_connect('server\host','usuario','clave');
$db_sql = mssql_select_db ( 'basededatos', $cnnsql );
return $cnnsql;
}
}
?>

archivo sel_consulta.php

cnn ();

// Se realiza conexión para verificar datos desde SQL SERVER
include_once '../../conexiones/cnn_conexion.php';
$sqldata=("SELECT * FROM usuarios");
$sqldatos=mssql_query($sqldata,$cnn_sql->mssqlcnn());
$sqlrow=mssql_fetch_array($sqldatos);

$ifxdata= ("SELECT * FROM pasante");
$ifxdatos=ifx_query($ifxdata, $cnn_ifx->ifxcnn());
$ifxrow=ifx_fetch_row($ifxdatos);

Ahora por favor, que estoy haciendo mal en el codigo porque no logro correr las funciones desde la otra página.
__________________
Necesito aprender para compartir mi saber...
  #7 (permalink)  
Antiguo 22/09/2006, 15:48
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Realmente no entiendo muy bien que estás haciendo ..

En un principio "encapsulas" en una classe unas cuantas funciones "sueltas" .. Luego llamas a una "función"? (sin instanaciar tu classe? ..)

Creo que deberías revisar la documentación oficial de PHP y ver como trabajar con Objetos (en classes):

http://www.php.net/oop

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 29/09/2006, 07:55
Avatar de Mulato  
Fecha de Ingreso: diciembre-2001
Ubicación: Caracas
Mensajes: 158
Antigüedad: 22 años, 4 meses
Puntos: 0
Pregunta Logre instanciarla, pero me pregunto si solo llama al objeto y lee todo el script

Ya por fin logre instanciarla en el otro archivo php ...

//Se instancia la clase de conexión por mssql
include_once 'src_conexion.php';
$sql_cnn = new cnn();
$cnn_sql = $sql_cnn->mssqlcnn();

Ahora me pregunto, si en la clase donde tengo una conexión contra Informix y otra contra SQLSERVER, arriba solo llamo la de SQLSERVER porque no necesito la de Informix

¿Al realizar el include_once el tambien ejecuta la conexión contra Informix o solo ejecuta la conexión contra SQLSERVER y se sale...?

¿Es que acaso debo poner exit; en la función..?
__________________
Necesito aprender para compartir mi saber...
  #9 (permalink)  
Antiguo 29/09/2006, 08:16
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Vamos a ver ..

Tu objeto (classe) "cnn" contiene dos métodos: uno que conecta a tal motor de BBDD y otro que conecta a otro.

Los "métodos" no se "ejecutan" hasta que se invocan (los llamas en tu código) .. por mucho que conecten a BBDD o hagan lo que tengan que hacer.

Así que sólo se ejecutará el "metodo" que tu llamees en tu código .. no los otros a no ser que interactuen entre ellos (que se llame uno a otro).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #10 (permalink)  
Antiguo 29/09/2006, 08:19
Avatar de Mulato  
Fecha de Ingreso: diciembre-2001
Ubicación: Caracas
Mensajes: 158
Antigüedad: 22 años, 4 meses
Puntos: 0
Caramba, amigo, gracias por aclarar mi duda...
__________________
Necesito aprender para compartir mi saber...
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 11:40.