He estado trabajando para pasar a OOP en PHP. He leído explicaciones en php.net, pero esperaba poder obtener algunas respuestas específicas aquí.Cómo estructurar clases en PHP
Intenté crear el siguiente ejemplo para ilustrar mi pregunta. Digamos que tengo clases de "Base de datos", "Productos" y "Usuarios", y quiero mostrar productos si un usuario tiene acceso.
Llamo la clase "Productos" a la función "showProducts()", que a su vez crea una instancia de la clase "Usuario" que crea una instancia del objeto "Base de datos" y verifica el nivel de acceso de los usuarios.
Si el usuario tiene acceso, la función "showProducts()" crea otra instancia del objeto "Base de datos" y consulta la base de datos.
class Database{
public function query(){
//runs query here
}
public function __construct() {
//sets up connection here
}
}
class User{
public function checkAccess(){
$db = new Database();
$db->query(//pass in query to check access)
//does stuff, then returns true or false
}
}
class Products{
public function showProducts(){
$user = new User();
if($user->checkAccess())
$db = new Database();
$db->query(//pass in query to get products)
}
}
Esperaba que alguien pudiera ilustrar cómo hacerlo de la manera correcta.
Me gustaría tener algún tipo de clase de controlador, que crea un objeto "Base de datos", que está disponible para todas las clases que necesitan acceder a él, sin tener que crear múltiples instancias del objeto "Base de datos". Me gustaría lo mismo con la clase de usuarios, por lo que hay un objeto $ users al que todas las clases pueden acceder, sin tener que crear un nuevo objeto cada vez que necesito usar algo en la clase "Usuario".
¡Pido disculpas si mi pregunta no está clara, y gracias de antemano por cualquier respuesta!
Gracias a todos por las respuestas!
¡Muchas gracias por la respuesta!Entonces, si tuviera otra clase que hiciera referencia en la clase de usuario, ¿pasaría también el objeto $ usuario como parámetro? – Ben
¡Sí, puedes! Puedes pasar tantas clases como quieras. Puede pasar el objeto a través del constructor si el objeto realmente necesita que ese objeto funcione. Y puede pasarlo a través del método setter si el objeto es opcional. Una vez que obtenga dependencias complicadas, entonces puede pensar en usar Dependency Injection Container donde describiría dependencias y Container podría ensamblar objetos de otros objetos y devolvérselos a usted :) Puede leer más sobre Inyección de Dependencia y Contenedor de Inyección de Dependencia aquí : http://fabien.potencier.org/article/12/do-you-need-a-dependency-injection-container – otporan