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.