Regresar   Foros del Web > Programación para sitios web > PHP > PHP orientado a objetos

El registro es Gratis en Foros del Web
Respuesta
 
Herramientas Buscar en Tema Desplegado
Antiguo 15/12/04, 12:41:00   #1 (permalink)
Ex. *********
Cluster tiene un muy buen nivel de karmaCluster tiene un muy buen nivel de karma
 
Registrado: nov 2002
Ubicación: Santiago - Chile
Mensajes: 34.433
Cluster is offline  
FAQ's - $PHP->Orientado_a_objetos()

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 fecha: 15/12/04 a las 12:52:16.
  Responder Con Cita
Antiguo 15/12/04, 12:48:07   #2 (permalink)
Ex. *********
Cluster tiene un muy buen nivel de karmaCluster tiene un muy buen nivel de karma
 
Registrado: nov 2002
Ubicación: Santiago - Chile
Mensajes: 34.433
Cluster is offline  
Tema: Utilidades/links
Versión de PHP: Cualquiera
Pregunta: Links de interes sobre POO
Respuesta:

Teoría:
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 jam1138 fecha: 16/07/07 a las 18:22:41.
  Responder Con Cita
Antiguo 18/12/04, 01:04:37   #3 (permalink)
baklao ha deshabilitado el Karma
 
Registrado: nov 2004
Ubicación: Santa Ana - Isla de Margarita
Mensajes: 473
baklao is offline  
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:
Desde Venezuela - Isla de Margarita.

Última edición por Cluster fecha: 16/02/06 a las 10:44:21.
  Responder Con Cita
Antiguo 27/06/05, 10:27:40   #4 (permalink)
HerSAn tiene un saldo positivo de karma
 
Registrado: may 2005
Mensajes: 152
Contactar con HerSAn a través de MSN
HerSAn is offline  
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(!@
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']; 
  Responder Con Cita
Antiguo 13/10/05, 04:10:24   #5 (permalink)
yampoo tiene un saldo positivo de karma
 
Registrado: nov 2002
Ubicación: Vilanova i la Geltrú
Mensajes: 1.942
Contactar con yampoo a través de Yahoo
yampoo is offline  
Tema: Conexión y ejecución con MySQL
Versión: Cualquiera

Código PHP:
<?

///////////////////////////////////////////////////////////
//   Classe conectar y trabajar con MySQL               //
//   Realiado por: Sergio Sola (contacto@mirablog.com) //
//   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.
  Responder Con Cita
Antiguo 16/01/06, 03:33:54   #6 (permalink)
elangelcaido tiene un saldo positivo de karma
 
Registrado: sep 2003
Ubicación: Oviedo
Mensajes: 844
elangelcaido is offline  
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...
________
Surfglassy.com Surf en Asturias
lukos.org
  Responder Con Cita
Antiguo 22/03/06, 13:58:36   #7 (permalink)
MarioNunes ha deshabilitado el Karma
 
Registrado: ago 2005
Mensajes: 263
MarioNunes is offline  
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