Eh, ben muhtemelen bu için flailed alıyorum, ama tamamen umutsuz iseniz bunun için bir Registry kullanabilirsiniz. (Ben And no OOP is used here so I'm not searching for private class members. Eğer her OOP ile bunu yapmak istemiyorum demek varsayalım beri) sınıfsız yapan küçük bir tane çırpılmış ettik
function ®istry_get_instance()
{
static $data = array();
return $data;
}
static $data değişkeni içindeki fonksiyon kapsam içinde kalıcıdır, bu nedenle istediğiniz yere işlevini çağırın ve hep aynı içeriğini alabilirsiniz. Önemli nokta returning by reference, örneğin
$registry = ®istry_get_instance(); // get $data array by reference
$registry['foo'] = 'bar'; // set something to $data
unset($registry); // delete global reference to $data
print_r(®istry_get_instance()); // show $data
Genel kapsamda bu yöntemi çağrılırken Açıkçası hala küresel kapsamda bir değişken olarak $ kayıt olurdu. Yani, kullanmak için kayıt defteri daha rahat yapmak için biraz daha fazla işlevleri ekleyebilirsiniz örneğin Kayıt Defteri veri ayarı için:
function registry_set($key, $value)
{
$registry = ®istry_get_instance();
$registry[$key] = $value;
}
ve tekrar dışarı almak için:
function registry_get($key)
{
$registry = ®istry_get_instance();
if(array_key_exists($key, $registry)) {
return $registry[$key];
} else {
trigger_error(sprintf(
'Undefined Index: %s', htmlentities($key)
), E_USER_NOTICE);
}
}
ve bir anahtar varsa kontrol etmek için:
function registry_isset($key)
{
$registry = ®istry_get_instance();
return array_key_exists($key, $registry);
}
: Eğer gibi kullanabilirsiniz hangi
registry_set('foo', 'bar'); // setting something to the registry
var_dump( registry_isset('foo') ); // check foo is in the registry now
echo registry_get('foo'); // prints 'bar'
echo registry_get('punt'); // raises Notice
Böyle bir ek yöntemle bir içerme dosyası Registry doldurmak olabilir:
function registry_load_file($file)
{
if(!is_readable(realpath($file))) {
return trigger_error(sprintf(
'File is not readable: %s', htmlentities($file)
), E_USER_WARNING);
}
$config = include $file;
if(!is_array($config)) {
return trigger_error(sprintf(
'Expected file %s to return an array', htmlentities($file))
, E_USER_WARNING);
}
$registry = ®istry_get_instance();
$registry += $config;
}
içeren dosya, bir dizi dönmek zorunda ile:
// config.php
return array(
'setting1' => 'something'
);
ve o zaman yapabileceğiniz
registry_load_from_file('config.php'); // add the contents of config to registry
print_r(registry_get_instance()); // show content of registry
Tabii ki, bu sadece bir küresel değişkeni olmaması için artık küresel kapsamda altı işlevleri. Buna değer eğer static fonksiyonları ve tüm bu referans şeyler şüpheli uygulama düşünün, özellikle de bilmiyorum.
Kavramının bir kanıtı olarak götürün :)