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

Properties en PHP

Estas en el tema de Properties en PHP en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Estimados, Estamos trabajando en un framework propio para la empresa en la que trabajo, es una estructura MVC. Queremos todo lo más orientado a objetos ...
  #1 (permalink)  
Antiguo 15/07/2008, 14:42
Avatar de Quest  
Fecha de Ingreso: diciembre-2002
Ubicación: Santiago
Mensajes: 129
Antigüedad: 21 años, 4 meses
Puntos: 2
Properties en PHP

Estimados,

Estamos trabajando en un framework propio para la empresa en la que trabajo, es una estructura MVC.
Queremos todo lo más orientado a objetos sea posible, y en la capa de abstraccion de base de datos, quieren ocupar properties o algo que se asemeje, pero en php no existe algo de ese estilo, asi que ocupamos el metodo __Call para hacer llamadas del tipo:

$curso = new Curso();
$registros = $curso->findAll();

echo $registros->getNombre();

asi que en el método __Call tiene una expresion regular que verifica si viene un getALGO y un setALGO.

Mi duda esta, en que tán práctico es esto, la aplicación ocuparía demaciados recursos en hacer esto, o existe otra manera de hacerlo sin perder demaciados recursos.

Muchas gracias de antemano.
__________________
http://victorsanmartin.com
Web Developer
http://www.guiasitios.cl
  #2 (permalink)  
Antiguo 15/07/2008, 15:53
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Properties en PHP

Hola Quest,

PHP también te da métodos magicos, como __get y __set, de tal forma que puedes hacer:
Código PHP:
class Algo {
     private 
$store;

     public function 
__get$name ) {
             return 
$this->store[$name];
     }

     public function 
__set$name$value ) {
             
$this->store[$name] = $value;
     }
}

$obj = new Algo();
$obj->nombre "Hola";
echo 
$obj->nombre
Saludos.
  #3 (permalink)  
Antiguo 17/07/2008, 07:32
Avatar de Quest  
Fecha de Ingreso: diciembre-2002
Ubicación: Santiago
Mensajes: 129
Antigüedad: 21 años, 4 meses
Puntos: 2
Respuesta: Properties en PHP

Muchas gracias GatorV pero el ejemplo que me das de setear la variable nombre y llamarla funciona igual sin tener que recurrir a los metodos get y set, lo que pasa es que en el proyecto la persona encargada de hacer las clases de abstracción a la base de datos, esta acostumbrado a ocupar $object->getDato y $ibject->setDato mas por convención que por nada, entonces ahi esta mi duda si ocupar __Call para emular eso es recomendable o no.

Saludos
__________________
http://victorsanmartin.com
Web Developer
http://www.guiasitios.cl
  #4 (permalink)  
Antiguo 17/07/2008, 08:13
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Properties en PHP

Pues como dices puede ser "caro" a la hora de pasarlo por la expresión regular, por eso lo que te conviene en ese caso es diseñar tus clases en un diagrama UML, y hay varios conversores que te transfieren de UML -> Clase, y te pasan todos los métodos set/get automáticamente.

Inclusive hay IDEs que de tus variables privadas te generan sets y gets de tus variables.

Creo es la mejor opción aunque si quieres irte por la vía de expresiones regulares puedes hacerlo.

Saludos.
  #5 (permalink)  
Antiguo 17/07/2008, 08:18
Avatar de Quest  
Fecha de Ingreso: diciembre-2002
Ubicación: Santiago
Mensajes: 129
Antigüedad: 21 años, 4 meses
Puntos: 2
Respuesta: Properties en PHP

Comprendo tu idea, lo que pasa es que las clases son abstractas, o sea, la estructura es algo asi:

Tengo la clase algo y al instanciarla carga un xml con su mismo nombre el cual carga una mapeo de la base de datos, y asu vez carga sus relaciones con otras clases.

Por ende, el archivo como código, sólo tiene un "class Algo extends OtroAlgo { }" y si fuese necesario algun metodo X, y OtroAlgo es el que tiene el método __call.

Saludos
__________________
http://victorsanmartin.com
Web Developer
http://www.guiasitios.cl
  #6 (permalink)  
Antiguo 17/07/2008, 08:19
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Properties en PHP

Entonces en ese caso tienes de dos como dices, o implementas __get y __set y acostumbras a tus programadores a hacerlo así, o implementas expresiones regulares para emular los get y set.

Saludos.
  #7 (permalink)  
Antiguo 17/07/2008, 08:23
Avatar de Quest  
Fecha de Ingreso: diciembre-2002
Ubicación: Santiago
Mensajes: 129
Antigüedad: 21 años, 4 meses
Puntos: 2
Respuesta: Properties en PHP

Si, estaba pensando a nivel de framework ocupar el metodo simple para setear y llamar datos ($class->nombre = 'victor' y echo $class->nombre), y para la aplicación que ocupen las expresiones regulares.

Lo que me interesaria saber, y no he encontrado nada en la red, es que tan viable para una aplicación escalable es ocupar expresiones regulares de la forma en que lo estoy haciendo.

Saludos y muchas gracias GatorV
__________________
http://victorsanmartin.com
Web Developer
http://www.guiasitios.cl
  #8 (permalink)  
Antiguo 17/07/2008, 08:52
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Properties en PHP

No conozco la forma pero por ejemplo Zend Framework soporta métodos de ese tipo como por ejemplo:
Código PHP:
$obj->findNamesById()
&
#243;
$obj->findUsersByName() 
Y usa __call y checa la expresión regular para encontrar find<items>By<type>.

Saludos.
  #9 (permalink)  
Antiguo 17/07/2008, 09:33
Avatar de Quest  
Fecha de Ingreso: diciembre-2002
Ubicación: Santiago
Mensajes: 129
Antigüedad: 21 años, 4 meses
Puntos: 2
Respuesta: Properties en PHP

Eso mismo estamos haciendo tambien, yo me base primordialmente en cake para hacer este desarrollo, y la forma de llamar es similar.
__________________
http://victorsanmartin.com
Web Developer
http://www.guiasitios.cl
  #10 (permalink)  
Antiguo 29/07/2008, 12:38
Avatar de Willjce  
Fecha de Ingreso: diciembre-2003
Ubicación: Lima - Peru
Mensajes: 67
Antigüedad: 20 años, 4 meses
Puntos: 0
De acuerdo Respuesta: Properties en PHP

Yo pienso que seguirias los pasos de SYMFONY te ayudaria mucho con __get __set :

public function __set($key, $value)
{
return $this->varHolder->setByRef($key, $value);
}
public function & __get($key)
{
return $this->varHolder->get($key);
}
__________________
Cita:
El éxito se alcanza convirtiendo cada paso en una meta y cada meta en un paso :pensando:
Att...
Tu amigo Willy... :aplauso:
  #11 (permalink)  
Antiguo 29/07/2008, 13:40
Avatar de Quest  
Fecha de Ingreso: diciembre-2002
Ubicación: Santiago
Mensajes: 129
Antigüedad: 21 años, 4 meses
Puntos: 2
Respuesta: Properties en PHP

pero __get y __set es lo mismo que poner echo $objecto->hola y $objeto->hola = 'hello world' u.u

Ahora tengo esto.
Código PHP:
<?php
class EntityData {
    
    var 
$properties = array();
    
    function 
__call($method$arguments
    {
        
//if (preg_match_all('/get(.+)/', $method, $test))
        
if (substr($method03) == 'get')
        {
            
//$property = $test[1][0];
            
$property substr($method3strlen($method));
            if (isset(
$this->properties[$property]))
            {
                return 
$this->properties[$property];
            }
        }

        
//if (preg_match_all('/set(.+)/', $method, $test))
        
if (substr($method03) == 'set')
        {
            
//$property = $test[1][0];
            
$property substr($method3strlen($method));
            if (
is_array($arguments))
            {
                
$this->properties[$property] = $arguments[0];
            }
            else
            {
                
$this->properties[$property] = $arguments;
            }
        }
        return 
false;
    }
}
?>
Aun no me decido si ocupar expresiones regulares o no :D

Saludos y garcias!!!
__________________
http://victorsanmartin.com
Web Developer
http://www.guiasitios.cl
  #12 (permalink)  
Antiguo 30/07/2008, 07:57
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Properties en PHP

Haz pruebade UnitTests, con eso y un benchmarks sabras que es mas rapido
  #13 (permalink)  
Antiguo 30/07/2008, 08:11
Avatar de Quest  
Fecha de Ingreso: diciembre-2002
Ubicación: Santiago
Mensajes: 129
Antigüedad: 21 años, 4 meses
Puntos: 2
Respuesta: Properties en PHP

Con Expresiones Regulares:
Código:
Test 1000 SETS
Time: 14.003 secs

Test 1000 GETS
Time: 11.158 secs

Total Time: 25.161 secs
Sin Expresiones Regulares:
Código:
Test 1000 SETS
Time: 8.6849 secs

Test 1000 GETS
Time: 6.7499 secs

Total Time: 15.4348 secs
Creo que resultado fue mas que claro.
__________________
http://victorsanmartin.com
Web Developer
http://www.guiasitios.cl
  #14 (permalink)  
Antiguo 30/07/2008, 08:15
Avatar de Quest  
Fecha de Ingreso: diciembre-2002
Ubicación: Santiago
Mensajes: 129
Antigüedad: 21 años, 4 meses
Puntos: 2
Respuesta: Properties en PHP

Bueno y la prueba sin setters/getters marca una diferencia mucho mas grande.

Código:
Test 1000 SETS ($object->properties['var'] = 1;)
Time: 0.515 secs

Test 1000 GETS ($object->properties['var'];)
Time: 0.5109 secs

Total Time: 1.0259 secs
__________________
http://victorsanmartin.com
Web Developer
http://www.guiasitios.cl
  #15 (permalink)  
Antiguo 30/07/2008, 09:13
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Properties en PHP

Claro, ya que es nativo el acceso, por eso te decia que mejor acostumbraras a tus programadores a usar ->propiedad mas que SetPropiedad o GetPropiedad
  #16 (permalink)  
Antiguo 30/07/2008, 09:22
Avatar de Quest  
Fecha de Ingreso: diciembre-2002
Ubicación: Santiago
Mensajes: 129
Antigüedad: 21 años, 4 meses
Puntos: 2
Respuesta: Properties en PHP

Claro, pero con programadores que piensan en JAVA y hablan todo el dia de UML, es un poco complicado :D.

De todas formas yo estoy a cargo del sistema, asi que la parte interna va a ser de manera directa, y a nivel de aplicacion (o sea lo que vean los programadores) van a tener su dichoso GetPropiedad.

Saludos y gracias por todo.
__________________
http://victorsanmartin.com
Web Developer
http://www.guiasitios.cl
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 16:08.