Tengo un config.php
que se incluye para cada página. En config puedo crear una matriz en la que se ve algo como:
$config = array();
$config['site_name'] = 'Site Name';
$config['base_path'] = '/home/docs/public_html/';
$config['libraries_path'] = $config['base_path'] . '/libraries';
//etc...
Entonces he function.php
, que también se incluye a casi cada página en la que tengo que usar global $config
para obtener acceso a ella - y esto es lo que me gustaría deshacerse de!
¿Cómo puedo acceder a $config
en las otras partes de mi código sin usar global
?
Alguien podría explicar, ¿por QUÉ no debería usar global
en mi ejemplo? Algunos dicen que es un mal tono, otros dicen que no es seguro?
EDIT 1:
Ejemplo de dónde y cómo puedo usarlo:
function conversion($Exec, $Param = array(), $Log = '') {
global $config;
$cmd = $config['phppath'] . ' ' . $config['base_path'] . '/' . $Exec;
foreach ($Param as $s)
{
$cmd .= ' ' . $s;
}
}
EDIT 2:
Poniendo todo esto en la clase, según lo sugerido por Vilx, sería genial, pero en este caso, ¿cómo puedo atarlo con el siguiente bucle que es la extracción de config key
y value
de la base de datos.
Yo la simplificación de la idea de la asignación $config
de la matriz, he aquí un ejemplo:
$sql = "SELECT * from settings";
$rsc = $db->Execute($sql);
if ( $rsc ) {
while(!$rsc->EOF) {
$field = $rsc->fields['setting_options'];
$config[$field] = $rsc->fields['setting_values'];
@$rsc->MoveNext();
}
}
EDIT 3:
Además, tengo que acceder a otros vars
de las funciones que se establecen en el config y algunos de ellos, por ejemplo:$db
, $language
y etc.
Si los pongo en la clase que realmente resuelve nada? Si utilizo global
¿qué es realmente el cambio?
EDIT 4:
He leído PHP global en las funciones donde Gordon explica en forma muy agradable de por qué no debería usar global
. Estoy de acuerdo en todo, pero yo no uso global
en mi caso para reasignar las variables, lo que resultará en que, como él dijo, <-- WTF!!
, ;)) sí, de acuerdo, es una locura. Pero si yo sólo necesita acceder a la base de datos a partir de una función sólo mediante el uso de global $db
¿dónde está el problema en este caso? ¿Cómo hacer esto de otra manera, sin el uso de global
?
EDIT 5:
En el mismo PHP global en las funciones de deceze dice: "La gran razón en contra de la global es que significa que la función depende de otro ámbito. Este va a ser desordenado, muy rápidamente."
Pero yo estoy hablando aquí de básica "INIT". Yo, básicamente, establecer define
pero el uso de vars
- bien que está mal en forma técnica. Pero su función no dependía de nada - pero el nombre de un var $db
que usted podría tener en cuenta? Es realmente global de la necesidad de utilizar $db
, donde es la DEPENDENCIA de aquí y cómo usarlo de otra manera?
P. S. yo sólo tenía un pensamiento, que nos estamos enfrentando el conflicto de dos diferentes mentes, por ejemplo: la mina (pero NO así la comprensión de la programación orientada a objetos) y los que podrían ser llamados gurús (desde mi punto de vista actual) en la programación orientada a objetos - lo que parece obvio para ellos que para mí se plantea nuevas preguntas. Yo creo que por eso esta pregunta se le pide una y otra vez. Personalmente, para mí es mucho más claro después de todo, pero aún hay cosas que aclarar.