Tengo una clase de base de datos PHP que se conecta a MySQL y completa todo el código PDO y lo uso para consultar la base de datos. Básicamente en el controlador de la página hago un nuevo objeto:
$db = new Database($dbConfig);
entonces puedo obtener datos de la base de datos al igual que el uso de una consulta preparada:
$params = array('username' => $username);
$result = $db->preparedSelect('select password, salt from users where username = :username', $params);
que copia los resultados de la instrucción de PDO en un nuevo Assoc array y devuelve solo los resultados de la base de datos a la página de llamada. Me iterar a través de ellos con un simple foreach así:
foreach ($result as $key => $val)
{
$password = $val['password'];
$salt = $val['salt'];
}
Ok lo que permite decir que quiero otra clase que se utiliza mi objeto $ db para que pueda acceder a la base de datos en algunos de los métodos. En el momento en que la otra clase es el siguiente:
class General
{
// Database object
private $db;
public function __construct($db)
{
$this->db = $db;
}
}
que funciona bien, pero me pregunto si el constructor debe tener este aspecto:
public function __construct(&$db)
{
$this->db = $db;
}
Eso debería significar que estoy pasando en a través de referencia y no copiar el objeto en la otra clase. No quiero una copia del objeto $ db dentro de la clase, quiero que use el objeto de la base de datos existente, por lo que no tengo varias copias flotando en el uso de la memoria.
¿Hay alguna diferencia en PHP5 al pasarlo como $ db o & $ db? De hacer algo de lectura, PHP5 pasa por defecto objetos por referencia, y otras personas dicen que ahora lo hace de la manera Java y algunos dicen que usar el & hace un enlace duro sea lo que sea. Estoy confundido. ¿Cuál es la mejor manera de hacerlo?
¡Muchas gracias!
Entonces, esencialmente si hago _construct ($ db) y luego cambio un valor dentro del objeto $ db, p. Ej. $ db-> testvar = 1 Tendré dos objetos $ db en la memoria, el original y el nuevo en el que testvar contiene un '1'. ¿Está bien? Si hago _construct (& $ db) luego asigno $ db-> testvar = 1, debería afectar el objeto original y solo tengo una instancia del objeto $ db en la memoria. ¿Está bien? – zuallauz
No, tendrá un objeto con el valor modificado en ambos casos, ya que en ninguno de los casos se está copiando el objeto. En la primera función, si hace '$ db = null' la persona que llama aún tendrá su $ db original, mientras que en la segunda función la persona que llama ya no tendrá el $ db original. – Anomie