Ver Mensaje Individual
  #3 (permalink)  
Antiguo 15/11/2008, 16:58
Avatar de enriqueplace
enriqueplace
 
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Respuesta: Propiedades genéricas

Que tal Mario

Cita:
Estoy tonteando un poco con las clases, para aprender,
Creo que ya me debes haber leído alguna vez, dudo que jugar solo con las clases llegues a algo productivo. Sugiero que te apoyes en conceptos, un libro, UML, manual de Java, pero no probar por probar. Aún el manual de PHP es pobre en ese sentido, justamente, porque es un manual técnico de sintaxis, no de programación.

Cita:
y se me ha planteado esta duda: tengo una clase con unas propiedades que son generales para todo mi sitio web, pero que cambiarían si se usaran en otro. Por ejemplo, una ruta donde buscar archivos (en mi sitio siempre va a ser la misma, pero si lo uso en otro sitio cambiará).
Sugerencia, cambia el término "propiedades" por "atributos", no siempre una propiedad es un atributo.

Lo que tú estás describiendo es lo más parecido a una constante, y en particular, de configuración.
  • las constantes son siempre públicas a todo el sistema
  • nadie las puede modificar luego de definidas (o no serían "constantes").

Puedes crearte un archivo configuracion.php y ahí definir todas las constantes del sistema, del estilo:

Código PHP:
<?php
error_reporting
(E_ALL E_STRICT);

/* RUTAS */
define('HOME''C:\xampp\htdocs');
define('APP_NAME''tarea8_solucion');
define('APP'HOME DIRECTORY_SEPARATOR APP_NAME );
define('LOG'APP DIRECTORY_SEPARATOR 'logs' );
Cita:
Al ser generales, no quiero tener que darles un valor cada vez que creo un objeto. Pero tampoco quiero darles el valor dentro del código de la clase, porque supongo que la clase debería poderse usar en otro sitio sin tocar su interior, ¿no?
Una variante que puedes hacer es crear una constante de la clase, pero, solo deberías usarla si esa constante está relacionada con la clase, no por comodidad.

Del estilo:

Código PHP:
class Archivo 
{
    const 
DIR '/tmp';
        
    public function 
getDir()
    {
       return 
self::DIR;
    }

También serán públicas, y podrás usarla desde fuera de la clase. Imaginemos que tenemos un método crear un archivo y le paso el nombre y el directorio por defecto (estoy inventando cualquier cosa):

Código PHP:
$archivo = new Archivo();

$archivo->creaArchivoNuevo('nombre del archivo'Archivo::DIR); 
Cita:
El archivo cambiará en cada objeto, pero el directorio será siempre el mismo. ¿Cómo puedo hacer para que no tenga que pasarle el directorio al constructor cada vez que instancio la clase, ni que darle el valor dentro del código de la clase?
Como comenté anteriormente, o defines una constante en la clase, pero esa información quedará a fuego y es la típica que debe ser "configurable", por lo tanto lo ideal es en un archivo de configuración.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com