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

FAQ's - $PHP->OrientadoAObjetos()

Estas en el tema de FAQ's - $PHP->OrientadoAObjetos() en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Normas de uso: La persona que va a publicar un FAQ debe indicar el Tema de la Pregunta, la Pregunta y la Respuesta a la ...
  #1 (permalink)  
Antiguo 15/12/2004, 12:41
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 8 meses
Puntos: 126
FAQ's - $PHP->OrientadoAObjetos()

Normas de uso:

La persona que va a publicar un FAQ debe indicar el Tema de la Pregunta, la Pregunta y la Respuesta a la misma, o en su defecto, un link hacia un Tema del Foro donde se haya tratado con ese problema en particular, y se haya resuelto o explicado correctamente. Podemos utilizar el siguiente esquema :

Tema: Tema (teoría, classes, etc...) (nos facilitará hacer indices a futuro y mantenerlo)
Versión de PHP: 4.x e inferiores o 5.x o superiores (dadas las diferencias entre ambas sobre el modelo de POO que emplean, es altamente recomendable que se indique la versión de PHP si corresponde).
Pregunta: ¿Pregunta? (si el tema es generíco, no es necesario crear una "pregunta" pero si recomendable clasificarlo de alguna manera).
Respuesta: Respuesta

Es importante recalcar algunas cosas:

* Este mensaje queda abierto, cualquier persona puede publicar su "FAQ", sólo intenten que no sean repetidas o de temas similares si no aportan algún punto de vista diferente.

* La persona que publica la FAQ o bien si es de otro autor al que haga referencia explicita en la misma FAQ queda bajo responsabilidad del mismo. Las preguntas aclaratorias por alguna FAQ pueden hacerse directamente por Mensajería privada al autor de dicha FAQ o quien la publique o de forma pública abriendo un nuevo tema en el foro y haciendo referencia a la FAQ aludida.



Un saludo, y animo con las FAQ's - $PHP->Orientado_a_objetos()

Última edición por Cluster; 15/12/2004 a las 12:52
  #2 (permalink)  
Antiguo 15/12/2004, 12:48
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 8 meses
Puntos: 126
Tema: Utilidades/links
Versión de PHP: Cualquiera
Pregunta: Links de interes sobre POO
Respuesta:

Teoría:
Bases de POO
En castellano
Introducción a POO en PHP
http://www.zonaphp.com/programacion-...bjetos-en-php/

PHP orientado a objetos. Parte I
http://www.webestilo.com/php/articulo.phtml?art=27

PHP orientado a objetos. Parte II
http://www.webestilo.com/php/articulo.phtml?art=28

PHP orientado a objetos. Parte y III
http://www.webestilo.com/php/articulo.phtml?art=30

PHP orientado a objetos - Historia y Basico
http://www.programacionweb.net/artic...iculo/?num=158


En Ingles
Patrones de diseño en PHP:
http://www.phppatterns.com

POO en PHP
http://www.sitepoint.com/article/php...-result-sets/1

Introducción a Objetos con PHP I
http://www.onlamp.com/pub/a/php/2002...hp_foundations

Introducción a Objetos con PHP I
http://www.onlamp.com/pub/a/php/2002...undations.html

PHP & POO
http://www.phpbuilder.com/columns/luis20000420.php3

Usando objetos para crear aplicaciones I
http://www.zend.com/zend/tut/tutorial-johnson.php

Usando objetos para crear aplicaciones II
http://www.zend.com/zend/tut/tutorial-johnson2.php

PatternsCentral
http://www.patternscentral.com/

Web Application Component Toolkit (Patrones)
http://wact.sourceforge.net/

Herramientas para modelo de objetos
Argo UML
http://argouml.tigris.org/

Umbrello UML
http://uml.sourceforge.net/

DIA
http://www.lysator.liu.se/~alla/dia/

XMI 2 PHP
http://www.phpedit.net/products/xmi2php/

Repositorio de classes:
PEAR
http://pear.php.net

PHP Classes
http://www.phpclasses.org

Hagan sus sugerencias de nuevos Links en este mensaje

Última edición por GatorV; 12/09/2011 a las 15:48
  #3 (permalink)  
Antiguo 18/12/2004, 01:04
Avatar de baklao  
Fecha de Ingreso: noviembre-2004
Ubicación: Santa Ana - Isla de Margarita
Mensajes: 482
Antigüedad: 12 años, 9 meses
Puntos: 0
Usuarios en Linea

Pregunta: Saber cuantos usuarios hay en linea.

Autor original: Víctor Simental (vic_mx)

Respuesta:

Esta es la estructura de nuestra tabla:
Código:
CREATE TABLE usuariosenlinea (
timestamp int(15) NOT NULL default '0',
ip varchar(40) NOT NULL default '',
location varchar(100) NOT NULL default '',
KEY timestamp (timestamp),
KEY ip (ip),
KEY location (location)
) TYPE=MyISAM;
Código PHP:
 <?php

class Usuariosenlinea
{
/*
    * @param string $servidor el host para conectar, usualmente localhost
    * @param string $basededatos el nombre de la base de datos
    * @param string $nombredb el nombre de la tabla, preferentemente no editar
    * @param string $usuario usuario de la base de datos
    * @param string $pass la contraseña de la base de datos
*/

   
var $servidor 'localhost';
   var 
$basededatos '';
   var 
$nombredb '';
   var 
$usuario '';
   var 
$pass '';
  
## Fin de Conexion ##

  
var $e_rror;
  
//Segundos para borrar de la base de datos a los usuarios inactivos
  
var $segundos 120;
  var 
$ahora 0;

    
//CONSTRUCTOR
    
function Usuariosenlinea() {

    
$this->recargar();

    }

    function 
cuantos() {

    return 
$this->ahora;

    }

    function 
enlinea() {

        if(
$this->ahora == 1) {

    echo 
$this->ahora;
        }
        else
        {
    echo 
$this->ahora;
        }

    }

        function 
ipreal(){

            if (
$real_ip getenv('HTTP_X_FORWARDED_FOR')){

                
$explode_real_ip explode(","$real_ip);
                return 
trim($explode_real_ip[0]);
            }
            else
            {
            return 
getenv('REMOTE_ADDR');
            }
        }

        function 
error(){

        return 
$this->e_rror mysql_error();

        }

        function 
recargar() {

            
$tiempo_actual time();
            
$tiempo_final $tiempo_actual $this->segundos;
            
$ip $this->ipreal();

        @
mysql_connect($this->servidor$this->usuario$this->pass)
        or die(
'Error al Intentar Conectar con la base de datos '.$this->error().'');

        @
mysql_select_db($this->basededatos)
        or die(
'Error Seleccionando la base de datos '.$this->error().'');

        
$result mysql_query("SELECT ip FROM $this->nombredb WHERE ip='$ip'")
        or die(
'Error de lectura en la base de datos '.$this->error().'');

        if(
mysql_num_rows($result) == 0){

        
mysql_query("INSERT INTO $this->nombredb VALUES ('$tiempo_actual','$ip','$_SERVER[REQUEST_URI]')")
        or die(
'Error al Insertar en la base de datos '.$this->error().'');

        }
        else

        {
        
mysql_query("UPDATE $this->nombredb SET timestamp='$tiempo_actual' where ip='$ip'")
        or die(
'Error al Insertar en la base de datos '.$this->error().'');
        }

        
mysql_query("DELETE FROM $this->nombredb WHERE timestamp < $tiempo_final")
        or die(
'Error al intentar borrar en la base de datos '.$this->error().'');

        
$result mysql_query("SELECT ip FROM $this->nombredb")
        or die(
'Error de lectura en la base de datos '.$this->error().'');

        
$this->ahora mysql_num_rows($result);

        
mysql_close();

        }

}

?>
Ahora bien como hacemos el llamado en la pagina de nosotros para mostrarlo es de la siguiente manera:
Código HTML:
<?php
    include("class.online.php");
    $enlinea = new Usuariosenlinea(); 
    $enlinea->enlinea(); 
?>
Suerte y Salud2.
__________________
Atte. Mohamed :aplauso:

Última edición por Cluster; 16/02/2006 a las 10:44
  #4 (permalink)  
Antiguo 27/06/2005, 10:27
 
Fecha de Ingreso: mayo-2005
Mensajes: 201
Antigüedad: 12 años, 3 meses
Puntos: 2
Tema: Sesiones

Versión de PHP: 4.x

Pregunta: Como personalizo las sesiones para alamcenarlas en una base de datos de MySQL ?

Respuesta:
Estructura de la tabla
Código:
DROP TABLE IF EXISTS `sesiones`.`sesiones`;
CREATE TABLE `sesiones` (
  `pk` varchar(32) NOT NULL default '',
  `inicio` int(10) unsigned NOT NULL default '0',
  `fin` int(10) unsigned NOT NULL default '0',
  `valor` longtext NOT NULL,
  PRIMARY KEY  (`pk`)
) TYPE=MyISAM;
Clase que se encarga de manejar las sesiones:
Código PHP:
//******************** ClaseSesiones.php ********************************
define('SQL_LEER_SESION',"SELECT valor FROM %s WHERE pk = '%s'");

define('SQL_ACTUALIZAR_SESION',"UPDATE %s SET fin = %d, valor = '%s' WHERE pk = '%s'");

define('SQL_AGREGAR_SESION',"INSERT INTO %s VALUES('%s',%d,%d,'%s')");

define('SQL_BORRAR_SESION',"DELETE FROM %s WHERE pk = '%s'");

define('SQL_EXPIRA_SESION',"DELETE FROM %s WHERE inicio < %d");

class 
MSesiones{

  var 
$_tabla;
  
  var 
$_BDUsuario;
  
  var 
$_BDClave;
  
  var 
$_BDHost;
  
  var 
$_BDatos;
  
  var 
$_idConMysql;
  
  var 
$_tiempo_sesion 10;
  
  var 
$_operSQL = array(
                        
SQL_LEER_SESION,
                        
SQL_ACTUALIZAR_SESION,
                        
SQL_AGREGAR_SESION,
                        
SQL_BORRAR_SESION,
                        
SQL_EXPIRA_SESION,
                        );
  
  var 
$_keys = array(
                        
'_tabla',
                        
'_BDUsuario',
                        
'_BDClave',
                        
'_BDHost',
                        
'_BDatos',
                        
'_tiempo_sesion'
                    
);

  function 
MSesiones($parametros,$sesion true){

    if(!
$sesion){
      return;
    }

    
session_set_save_handler (
        array(&
$this'open'),
        array(&
$this'close'),
        array(&
$this'read'),
        array(&
$this'write'),
        array(&
$this'destroy'),
        array(&
$this'gc')
        );

    if(!
is_array($parametros)){
      
trigger_error('Debe de pasar un arreglo',E_USER_ERROR);
    }

    foreach(
$parametros as $k => $v){
      if(!
in_array($k,$this->_keys)){
        
trigger_error("Falta el parametro $k",E_USER_ERROR);
      }
      if(empty(
$v)){
        continue;
      }
      
$this->$k $v;
    }

  }
  
  function 
open($salvar_sesion,$nombre_sesion){
    
$this->_idConMysql = @mysql_connect($this->_BDHost,$this->_BDUsuario,$this->_BDClave);
    
$bdatos = @mysql_select_db($this->_BDatos);
    if(!
$this->_idConMysql || !$bdatos){
      return 
false;
    }
    return 
true;
  }
  
  function 
close(){
    
$this->gc(0);
    return 
true;
  }
  
  function 
read($id){
    
$sql sprintf($this->_operSQL[0],$this->_tabla,$id);
    
$rMysql = @mysql_query($sql,$this->_idConMysql);

    if([email protected]
mysql_num_rows($rMysql)>0){
        return 
'';
    }
    
$regValor mysql_fetch_assoc($rMysql);
    return 
$regValor['valor'];
  }
  
  function 
write($id,$valor){

    
$sql sprintf($this->_operSQL[1],$this->_tabla,time(),$valor,$id);
    
$rMysql = @mysql_query($sql);
    if(!
$rMysql){
      return 
false;
    }
    if(
mysql_affected_rows($this->_idConMysql)){
      return 
true;
    }
    
    
$sql sprintf($this->_operSQL[2],$this->_tabla,$id,time(),time(),$valor);
    
$rMysql = @mysql_query($sql);
    if(
mysql_affected_rows($this->_idConMysql)){
      return 
true;
    }else{
      return 
false;
    }
  }
  
  function 
destroy($id){
    
$sql sprintf($this->_operSQL[3],$this->_tabla,$id);
    
$rMysql = @mysql_query($sql);
    if(
mysql_affected_rows($this->_idConMysql)){
      return 
true;
    }else{
      return 
false;
    }
  }
  
  function 
gc($vida){
    
$sql sprintf($this->operSQL[4],strtotime("-$this->_tiempo_sesion minutes"));
    
$rMysql = @mysql_query($sql);
    if(
mysql_affected_rows($this->_idConMysql)){
      return 
true;
    }else{
      return 
false;
    }
  }
  
}
//Fin MSesiones 
Ejemplo de uso:
Código PHP:
//Incluimos la definicion de la clase
require('ClaseSesiones.php');
//la clase espera un arreglo con los siguientes parametros
//_tabla = tabla de la base de datos que contendra los datos de las sesiones
//_BDusuario = cuenta de conexion a mysql
//_BDClave = contraseña de la cuenta de mysql
//_BDHost = servidor al que se quiere acceder
//_BDatos = Base de datos a la que accede la cuenta
//_tiempo_sesion = tiempo que existira como registro de la sesion en minutos
// si se deja en blanco pone como default 10 minutos 
//
$conf = array(  '_tabla'=>'sesiones',
                
'_BDUsuario'=>'hersan',
                
'_BDClave'=>'jasson',
                
'_BDHost'=>'localhost',
                
'_BDatos'=>'sesiones',
                
'_tiempo_sesion'=>'');
// creamos objeto sesion
$sesion = new MSesiones($conf);
// iniciamos la sesion
session_start();

if (!isset (
$_SESSION['counter'])) {
    
$_SESSION['counter'] = 1;
}

$_SESSION['counter']++;

echo 
$_SESSION['counter']; 
  #5 (permalink)  
Antiguo 13/10/2005, 04:10
Avatar de yampoo  
Fecha de Ingreso: noviembre-2001
Ubicación: Vilanova i la Geltrú
Mensajes: 1.942
Antigüedad: 15 años, 10 meses
Puntos: 0
Tema: Conexión y ejecución con MySQL
Versión: Cualquiera

Código PHP:
<?

///////////////////////////////////////////////////////////
//   Classe conectar y trabajar con MySQL               //
//   Realiado por: Sergio Sola ([email protected]) //
//   El: 13 de octubre 2005                           //
//   Licencia: GNU (http://www.gnu.org/)             //
//////////////////////////////////////////////////////

class conectarMySQL {
    
//iniciamos variables
    //atributos para conectar la base de datos
    
var $servidor//servidor donde se encuentra la base de datos
    
var $usuario//nombre de usuario de la base de datos
    
var $password//password de la base de datos 
    
var $bd//nombre de la base de datos a la que quieres acceder
    //////////////////////////////////////////////////////////////////////////
    
var $consulta//aquí se guarda las consultas que se realizan
    
var $enlace//aquí se almacena la conexión con la bd, sí se ha producido
    
var $resultado//aquí se guardan los datos que se generen de una consulta
    
    //constructor, donde se inicializan las variables
    
    
function conectarMySQL($servidor,$usuario,$password,$bd) {
        
$this->servidor=$servidor;
        
$this->usuario=$usuario;
        
$this->password=$password;
        
$this->bd=$bd;
    }
    
    
//conectamos con la base de datos
    
function conectar() {
        
//se realiza la conexión a la base de datos
        
if($this->enlace=mysql_connect($this->servidor,$this->usuario,$this->password)) {
            
//se intenta acceder a la base de datos que deseeamos
            
if(mysql_select_db($this->bd,$this->enlace)) {
                
//Sí es correcta muestra mensaje (sí quieres lo quitas, sólo sirve para ver si funciona).
                
echo "Conexión correcta";
            } else {
                
//Si falla muestra el mensaje que el error está al acceder a la base de datos
                
echo "No se ha podido seleccionar la  BD";
            }
        } else {
            
//Si falla la conexión con la base de datos se muestra el mensaje
            
echo "No se ha podido conectar a la bd";
        }                 
    }
    
    
//function consultas a la bd
    
function consultar($query) {
        
//aquí se realizan las consultas a la base de datos
        
$this->consulta=mysql_query($query,$this->enlace);
    }
    
    
//obtener resultados de la consulta
    
function obtendatos() {
        
//aquí se obtienen los datos de la consulta
        
$this->resultado=mysql_fetch_array($this->consulta);
        return 
$this->resultado;
    }
    
//cerramos la conexión con la base de datos
    
function cerrarconexion() {
        
mysql_close($this->enlace);
    }
    
//libera el contenido que se encuentra en el atributo 
    
function limpiaconsulta() {
        
mysql_free_result($this->consulta);
    }
}

//creamos el objeto con los datos de nuestra base de datos
$obj=new conectarMySQL("SERVIDOR","USUARIO","PASSWORD","BASE DE DATOS");
//realizamos la conexión a la base de datos
$obj->conectar();
//aquí realizamos la consulta que queramos
$obj->consultar("select * from urls limit 0,10");
//por ejemplo la de mostrar 10 direcciones de una tabla llamada urls..
while($row=$obj->obtendatos()) {
    echo 
"<br><a href=".$row['url'].">".$row['title']."</a>";
}
//limpiamos la consulta
$obj->limpiaconsulta();
//cerramos la conexión...
$obj->cerrarconexion();
?>
Les dejo un código que he hecho hoy en el trabajo, estoy empezando con POO, y creo que es un buen ejemplo para ver como trabajar con bases de datos y POO, es fácil de usar, y a mi no me ha dado ningún problema, sí tenéis alguna duda, pergutarme.
  #6 (permalink)  
Antiguo 16/01/2006, 03:33
Avatar de elangelcaido  
Fecha de Ingreso: septiembre-2003
Ubicación: Oviedo
Mensajes: 1.068
Antigüedad: 14 años
Puntos: 4
Referencias de atributos entre clases

Pregunta: ¿Como funcionan las referencias de los atributos entre clases?
Respuesta: El siguiente ejemplo es la actualizacion de un atributo de una clase A a traves de otra clase B.
Código PHP:
class A{
    var 
$vblA=0;
    
    function 
A($num){
        
$this->vblA=$num;
    }
    
    function &
getvbl(){
        
$r=&$this->vblA;
        return 
$r;
    }
    
    function 
setvlb($num){
        
$this->vblA=$num;
    }
}

class 
B{
    var 
$miarray=null;
    
    function 
B(){
        for(
$i=0;$i<5;$i++){
            
$this->miarray[]=new A($i);
        }
    }
    
    function 
prueba($i){
        
$elemento=$this->getElemento($i);
        echo 
'Elemento antes de actualizar: '.$elemento->getvbl().'<br>';
        
$elemento->setvlb(1000);
        echo 
'Elemento despues de actualizar: '.$elemento->getvbl().'<br>';
        echo 
'Comprobacion con array ya actualizado: '.$this->miarray[$i]->getvbl();
    }
    
    function 
getElemento($i){
        
$retorno=null;
        for(
$j=0;$j<count($this->miarray);$j++){
            if(
$i==$j){
                
$retorno=$this->miarray[$j];
            }
        }
        return 
$retorno;
    }
}

$b=new B();
$b->prueba(1); 
__________________
Ta Luego! Al final sólo puede quedar uno...
________
lukos.org
  #7 (permalink)  
Antiguo 22/03/2006, 13:58
Avatar de MarioNunes  
Fecha de Ingreso: agosto-2005
Mensajes: 280
Antigüedad: 12 años, 1 mes
Puntos: 1
Tema: Clase conexión a Base de Datos
Pregunta: ¿Como puedo conectarme a Mysql y/o Oracle?
Respuesta:
* $host: El host de la BD de MySQL, en caso de utilizar BD Oracle el host tiene que ir vacío ya que el número de parámetros en el constructor seguirán siendo los mismos.
* $user: El usuario de la base de datos.
* $pass: El password de la base de datos.
* $db: En MySQL este parámetro tendrá el nombre del esquema existente en MySQL al que queremos conectar, el nombre de la BD. En caso de ser Oracle, $db tendrá el nombre que se ha configurado en el TNSNAMES.ORA para la conexión a Oracle.
* $tipo_db: Esta variable es la que decide que funciones utilizarán los métodos, si las de Oracle o las de MySQL. Los 2 posibles valores que podrá tener son: 0 = MySQL y 1 = Oracle.

Código PHP:
function __construct($host,$user,$pass,$db,$tipo_db)
 {
  
$this->host=$host;
  
$this->user=$user;
  
$this->pass=$pass;
  
$this->db=$db;
  
$this->tipo_db=$tipo_db;
  
//MySQL
  
if($this->tipo_db==0)
  {
   
$this->conexion mysql_connect($host$user$pass);
   if (!
$this->conexion) {
   die(
'Sin conexión : ' mysql_error());
   }
   
$db_selected mysql_select_db($db$this->conexion);
   if (!
$db_selected) {
    die (
'No se puede usar la base de datos seleccionada: ' mysql_error());
   }
  }
  
//Oracle
  
if($this->tipo_db==1)
  {
   
$this->conexion OCILogon($user,$pass,$db);
   if (!
$this->conexion)
        {
     
$mensaje "Mensaje de Error: [" OCIError($this->conexion) . "]";
     return 
$mensaje;
     exit;
    }
        else
        {
         return 
$this->conexion;
        }
  }
 } 

Podemos observar también que nada más comenzar a codificar el constructor asignamos valores a las propiedades de la clase con los parámetros que recibe, esto es necesario para que funcione el método autonumerico() que verémos más adelante.

El método lista que recibe como parámetro el string de la sentencia SQL que queremos consultar a la BD devuelve en ambos casos, si es MySQL u Oracle, un array bidimensional en la que la primera dimensión es el nombre de las columnas y la segunda los valores que contiene cada columna. Y la forma de consultar la columna de un registro en concreto sería: $rs["NombreColumna"][NumeroRegistro];
Código PHP:
function lista($sentencia)
 {
  
//MySQL
  
if($this->tipo_db==0)
  {
   
$arr = array();
   
$col=0;
   
$seleccion mysql_query($sentencia);
   if (!
$seleccion) {
    die(
'Error en consulta: ' mysql_error());
   }
   if (
mysql_num_rows($seleccion) > 0)
   {
     
$x=0;
     while(
$row mysql_fetch_row($seleccion))
     {
       foreach(
$row as $i => $value) {
       
$column mysql_field_name($seleccion,$i);
       
$arr["$column"][$x]=$value;
       }
       
$x++;
     }
   }
   
$this->nrows=$x;
   
mysql_free_result($seleccion);
   return 
$arr;
  }
  
//Oracle
  
if($this->tipo_db==1)
  {
   
$stmt OCIParse($this->conexion$sentencia);
   
OCIExecute($stmt);
   
$this->nrows=oci_fetch_all($stmt$results);
   
$this->ncolumns=ocinumcols($stmt);
   return 
$results;
   
OCI_Free_statement($stmt);
  }
 } 
Es importante tener en cuenta que el método lista solo se utilizará para listar datos, NUNCA para actualizar y/o introducir nuevos registros.

El método actualiza que recibe como parámetro el string de la sentencia SQL que queremos ejecutar. A diferencia del método lista, este método no devuelve ningún tipo de valor. Este método solo está para introducir nuevos registros en una tabla y para actualizar registros de tablas.
Código PHP:
function actualiza($sentencia)
 {
  
//MySQL
  
if($this->tipo_db==0)
  {
   
$seleccion mysql_query($sentencia);
   if (!
$seleccion) {
    die(
'Error en consulta: ' mysql_error());
   }
  }
  
//Oracle
  
if($this->tipo_db==1)
  {
    
$stmt=OCIParse($this->conexion$sentencia);
        
OCIExecute($stmt);
  }
 } 
Como su própio nombre indica, el método autonumerico() Al no existir en Oracle los campos autonuméricos he creado este método. Recibe como parámetro la tabla en la que deseamos buscar cual será el siguiente número de registro, y claro en esa tabla ¿qué campo tiene que ser el autonumerico?. Devuelve como resultado el número mayor + 1.
Código PHP:
function autonumerico($tabla,$campo)
 {
  
$sql="select max(".$campo.") as NUMERO from ".$tabla." ";
  
$host=$this->host;
  
$user=$this->user;
  
$pass=$this->pass;
  
$db=$this->db;
  
$tipo_db=$this->tipo_db;
  
$db=new db_conexion($host,$user,$pass,$db,$tipo_db);
  
$rs=$db->lista($sql);
  if(
is_null($rs['NUMERO'][0]))
        
$numero=0;
  else
        
$numero=$rs['NUMERO'][0];
  
$db->liberar_rs($rs);
  return 
$numero+1;
 } 
Este método es el que se utiliza para liberar de memoria los datos que contiene el contenedor. El contenedor es el que almacena en memoria el resultado de una sentencia SQL.
Código PHP:
 {
   
$recordset=null;
 } 

Al destruir el objeto que contiene la instancia de la clase, cerramos la conexión con la BD.
Código PHP:
function __destruct()
 {
  
//MySQL
  
if($this->tipo_db==0){
   
mysql_close($this->conexion);
  }
  
//Oracle
  
if($this->tipo_db==1){
   
OCI_close($this->conexion);
  }
 } 
Una vez que he terminado de explicar los métodos de la clase os explico como utilizar la clase:

Ejemplo MySQL:
Código PHP:
require('conexion.class.php');
$db="prueba";
$user="root";
$pass="root";
$host="localhost";
$db=new db_conexion($host,$user,$pass,$db);

//Listar información
$sql="select Nombre from prueba";
$rs=$db->lista($sql);
$nrows=$db->nrows;
for(
$i=0$i<$nrows;$i++)
{
    echo 
$rs['Nombre'][$i]."";

//Autonumérico
echo $db->autonumerico("prueba","id");
//Actualizar un registro
$sql="update prueba set nombre = 'nuevo valor' where id=1";
$db->actualiza($sql);
//Insertar un nuevo registro
$sql="insert into prueba (id,nombre) values (2,'Nuevo Nombre'";
$db->actualiza($sql); 

Ejemplo Oracle:
Código PHP:
require('conexion.class.php');
$db="NombreTNS";
$user="user";
$pass="pass";
$host=""//Si contiene algún valor tampoco sería problema, ya que en caso de ser Oracle no se utiliza para nada
          //pero como es una de las variables del constructor no se puede omitir.
$db=new db_conexion($host,$user,$pass,$db);
//Listar información
$sql="select Nombre from prueba";
$rs=$db->lista($sql);
$nrows=$db->nrows;
for(
$i=0$i<$nrows;$i++)
{
    echo 
$rs['Nombre'][$i]."";
}

//Autonumérico
echo $db->autonumerico("prueba","id");
//Actualizar un registro
$sql="update prueba set nombre = 'nuevo valor' where id=1";
$db->actualiza($sql);
//Insertar un nuevo registro
$sql="insert into prueba (id,nombre) values (2,'Nuevo Nombre'";
$db->actualiza($sql); 

Como podeis observar los dos ejemplos son idénticos a diferencia de la creación del objeto conexión, para que sea más práctico el reutilizar el código, os dejo aquí el código de la clase completa.

conexion.class.php
Código PHP:
class db_conexion
{
 var 
$conexion;
 var 
$nrows;
 var 
$host;
 var 
$user;
 var 
$pass;
 var 
$db;
 var 
$tipo_db;
function 
__construct($host,$user,$pass,$db,$tipo_db)
 {
  
$this->host=$host;
  
$this->user=$user;
  
$this->pass=$pass;
  
$this->db=$db;
  
$this->tipo_db=$tipo_db;
  
//MySQL
  
if($this->tipo_db==0)
  {
   
$this->conexion mysql_connect($host$user$pass);
   if (!
$this->conexion) {
   die(
'Sin conexión : ' mysql_error());
   }
   
$db_selected mysql_select_db($db$this->conexion);
   if (!
$db_selected) {
    die (
'No se puede usar la base de datos seleccionada: ' mysql_error());
   }
  }
  
//Oracle
  
if($this->tipo_db==1)
  {
   
$this->conexion OCILogon($user,$pass,$db);
   if (!
$this->conexion)
        {
     
$mensaje "Mensaje de Error: [" OCIError($this->conexion) . "]";
     return 
$mensaje;
     exit;
    }
        else
        {
         return 
$this->conexion;
        }
  }
 }
 function 
lista($sentencia)
 {
  
//MySQL
  
if($this->tipo_db==0)
  {
   
$arr = array();
   
$col=0;
   
$seleccion mysql_query($sentencia);
   if (!
$seleccion) {
    die(
'Error en consulta: ' mysql_error());
   }
   if (
mysql_num_rows($seleccion) > 0)
   {
     
$x=0;
     while(
$row mysql_fetch_row($seleccion))
     {
       foreach(
$row as $i => $value) {
       
$column mysql_field_name($seleccion,$i);
       
$arr["$column"][$x]=$value;
       }
       
$x++;
     }
   }
   
$this->nrows=$x;
   
mysql_free_result($seleccion);
   return 
$arr;
  }
  
//Oracle
  
if($this->tipo_db==1)
  {
   
$stmt OCIParse($this->conexion$sentencia);
   
OCIExecute($stmt);
   
$this->nrows=oci_fetch_all($stmt$results);
   
$this->ncolumns=ocinumcols($stmt);
   return 
$results;
   
OCI_Free_statement($stmt);
  }
 }
 function 
actualiza($sentencia)
 {
  
//MySQL
  
if($this->tipo_db==0)
  {
   
$seleccion mysql_query($sentencia);
   if (!
$seleccion) {
    die(
'Error en consulta: ' mysql_error());
   }
  }
  
//Oracle
  
if($this->tipo_db==1)
  {
    
$stmt=OCIParse($this->conexion$sentencia);
        
OCIExecute($stmt);
  }
 }

function 
autonumerico($tabla,$campo)
 {
  
$sql="select max(".$campo.") as NUMERO from ".$tabla." ";
  
$host=$this->host;
  
$user=$this->user;
  
$pass=$this->pass;
  
$db=$this->db;
  
$tipo_db=$this->tipo_db;
  
$db=new db_conexion($host,$user,$pass,$db,$tipo_db);
  
$rs=$db->lista($sql);
  if(
is_null($rs['NUMERO'][0]))
        
$numero=0;
  else
        
$numero=$rs['NUMERO'][0];
  
$db->liberar_rs($rs);
  return 
$numero+1;
 }

function 
liberar_rs($recordset)
 {
   
$recordset=null;
 }

function 
__destruct()
 {
  
//MySQL
  
if($this->tipo_db==0){
   
mysql_close($this->conexion);
  }
  
//Oracle
  
if($this->tipo_db==1){
   
OCI_close($this->conexion);
  }
 }


También es de interés que visitéis estas direcciones:

http://www.jvmultimedia.com/portal/node/6

http://adodb.sourceforge.net/
__________________
www.pensandoenred.com

Última edición por jam1138; 22/03/2006 a las 17:11
  #8 (permalink)  
Antiguo 28/09/2008, 08:54
 
Fecha de Ingreso: mayo-2007
Mensajes: 348
Antigüedad: 10 años, 3 meses
Puntos: 9
Respuesta: FAQ's - $PHP->Orientado_a_objetos()

Tema: Utilidades/links
Versión de PHP: 5
Pregunta: Links de interes sobre POO
Respuesta:

http://www.phpya.com.ar/poo


Última edición por GatorV; 28/09/2008 a las 12:34
  #9 (permalink)  
Antiguo 25/12/2008, 18:04
 
Fecha de Ingreso: diciembre-2008
Mensajes: 70
Antigüedad: 8 años, 8 meses
Puntos: 4
Respuesta: FAQ's - $PHP->Orientado_a_objetos()

Tema: Estructura basica de un objeto
Version de PHP: 4
Pregunta: ¿Cual es la estructura basica de una clase y un objeto, asi como su utilizacion?
Respuesta:
Estructura para la clase y la creacion del objeto:
Código PHP:
class nombre_clase
{
/*Constructor, se ejecutara cada vez que se llame*/
function nombre_clase(){
Cualquier accion necesaria
//Termina la funcion
}

/*Despues se pueden añadir mas funciones necesarias, un ejemplo*/
function ejemplo(valor_opcional){
/*Contenido de la funcion*/
//Termina la funcion
}
//Termina la clase
}

/*Creamos el objeto por medio de 'new'*/
$nombre_objeto = new nombre_clase
Estructura para llamar al objeto y sus funciones:
Código PHP:
$nombre_objeto->nombreDeLaFuncion(valoresParaFuncion); 
Si nos va a regresar algun valor la funcion que llamemos (que es lo mas común) podemos asignar una variable:
Código PHP:
$nombre_variable $nombre_objeto->nombreDeLaFuncion(valoresParaFuncion); 
Por ultimo un ejemplo con la clase creada anteriormente:
Código PHP:
$resultado $proceso->ejemplo($valor); 

Última edición por jam1138; 26/12/2008 a las 03:49 Razón: No aprovecha las ventajas de PHP5. Edito como versión a PHP4
  #10 (permalink)  
Antiguo 18/09/2009, 09:03
Avatar de lobo_php  
Fecha de Ingreso: noviembre-2007
Ubicación: Cali-Colombia
Mensajes: 1.869
Antigüedad: 9 años, 10 meses
Puntos: 75
Respuesta: FAQ's - $PHP->Orientado_a_objetos()

Tema: Idiomas en paginas web
Pregunta: ¿Cómo crear una pagina web con varios idiomas?
Respuesta:
http://www.forosdelweb.com/wiki/PHP:...varios_idiomas
__________________
Cabuntu.org - Difundiendo Software Libre en Cali, Colombia
Usuario Linux # 483175
  #11 (permalink)  
Antiguo 09/12/2010, 22:04
Avatar de ghidalgoram  
Fecha de Ingreso: marzo-2008
Ubicación: Costa Rica
Mensajes: 439
Antigüedad: 9 años, 6 meses
Puntos: 7
Respuesta: FAQ's - $PHP->OrientadoAObjetos()

Tema: PHP FRAMEWORKS

Pregunta: ¿Cuáles son los 10 más importantes Frameworks de PHP?
Respuesta: http://www.phpframeworks.com/
__________________
Loading...
  #12 (permalink)  
Antiguo 13/01/2011, 09:30
Avatar de CodeIgniter  
Fecha de Ingreso: enero-2011
Ubicación: $this->load->view('Rafaela', 'Argentina')
Mensajes: 44
Antigüedad: 6 años, 8 meses
Puntos: 14
Respuesta: FAQ's - $PHP->OrientadoAObjetos()

Tema: Modelo MVC
Pregunta: ¿De qué sirve programar con vistas, controladores y modelos en lugar de hacerlo todo en un único archivo?
Respuesta:

Muy sencillo. La parte lógica de tu software (el código verdaderamente importante y que define el comportamiento de un sistema) queda en tus controladores.

Y todo el extenso código HTML (centenares o miles de líneas de código) queda en las vistas.

¿Y esto de que sirve?

Tu software queda mucho más entendible y sencillo de mantener!

Aprovechando que el código HTML queda en las vistas, el código de tus controladores queda mucho más compacto, en consecuencia tu rutina es más comprensible y fácil de extender o modificar; inclusive para nuevos programadores que se agreguen al proyecto en el futuro.

Distinto ocurre cuando cuando tienes todo tu código junto en un único archivo .php (algo que es muy común, especialmente cuando iniciamos a programar). Tus php y consultas Mysql mezclado con las miles de línea de código HTML….., lio total….

Cuando necesitas hacer un cambio en el comportamiento de tu soft o agregar una funcionalidad, es complicado y tedioso.

¿Qué es más sencillo de entender y modificar?
  • Un archivo con miles de línea? (tal como propone la programación secuencial)
  • O un archivo con sólo 10 o 20 líneas? (como propone el modelo MVC)

Última edición por GatorV; 13/01/2011 a las 10:06
  #13 (permalink)  
Antiguo 12/07/2011, 13:55
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 10 años, 5 meses
Puntos: 290
Respuesta: FAQ's - $PHP->OrientadoAObjetos()

Tema: Como usar la cache que poseen varios CMS y frameworks ?
Versión de PHP: 4+
Respuesta:

Solo...tenga que cuenta que:

1) No tiene sentido colocar la cache en su propia maquina (localhost) pues le dara problemas a la hora de debuguear su desarrollo

Código PHP:
// No en LOCALHOST!!! -uso clases de CI en el ejemplo
If ($this->input->ip_address()!='127.0.0.1'){
  
$this->output->cache(10);  // guardo paginas

Esto lo coloco en el constructor del controlador.

2) No deberia colocar el codigo que activa las caches en secciones de login / control panel.. !!! sino.. puede que una y otra vez se de un mensaje de "contraseña incorrrecta"...por ejemplo

Ademas...deberia tener cuidado porque Ud. puede presentarle contenidos diferentes a usuarios logueados......en tal caso... no deberian cachearse!!!! aca la solucion: http://www.forosdelweb.com/f68/re-direccion-como-928778

3) Tenga en cuenta que las paginas se guardan como archivos en un directorio y este debe tener los permisos de escritura correspondientes! estos los puede setear con FileZilla en su servidor.

Es todo!
__________________
Salu2!

Última edición por Italico76; 12/07/2011 a las 18:26
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

SíEste tema le ha gustado a 27 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 23:43.