Co to?
Wzorzec ten ma pełnij rolę rejestru, w którym przechowywuje się najrózniejsze dane, od konfiguracji skryptu po dane wybierane z bazy. Ja uzywam tego wzorca jedynie do przechowywania konfiguracji.
Implementacja
Oto moja implementacja wzorca Registry:
Dla PHP4:
Kod:
<?php
class Registry
{
var $aVars;
function set ( $sVariable, $sValue )
{
if ( is_array ( $sValue ) )
{
foreach ( $sValue as $sKey => $sVal )
{
$this->aVars[$sVariable . '_' . $sKey] = $sVal;
}
}
else
{
$this->aVars[$sVariable] = $sValue;
}
}
function get ( $sVar )
{
return isset ( $this->aVars[$sVar] ) ? $sVar : false;
}
}
?>
Dla PHP5:
Kod:
<?php
class Registry
{
public $aVars;
public function set ( $sVariable, $sValue )
{
if ( is_array ( $sValue ) )
{
foreach ( $sValue as $sKey => $sVal )
{
$this->aVars[$sVariable . '_' . $sKey] = $sVal;
}
}
else
{
$this->aVars[$sVariable] = $sValue;
}
}
public function get ( $sVar )
{
return isset ( $this->aVars[$sVar] ) ? $sVar : false;
}
}
?>
Co nam to daje?
Zaletą wzorca Registry jest to, że ważne dane(konfiguracja), mamy w jednym miejscu.
Nie ma potrzeby uzywania tablicy superglobalnej ( $GLOBALS[] ) do uzyskania wartości róznych zmiennych.
Sposób użycia:
Przykład na pliku ini z konfiguracja jakiegoś skryptu moze wyglądać tak:
Plik ini:
Kod:
zmienna1="wartość"
zmienna2="inna_wartość"
Kod:
<?php
$registry = new Registry;
$registry->set ( 'config', parse_ini_file ( 'plik.ini' ) );
echo $registry->get ( 'config_zmienna1' );
echo $registry->get ( 'config_zmienna2' );
?>
Nic nie stoi na przeszkodzie aby dodać do rejestru tablice. Wówczas argument metody get ma postać np.:
config_zmienna1
config_zmienna2
Mam nadzieję, że zrozumieliście, jeśli nie odsylam na strony:
http://phppatterns.com i
http://php.net w języku angielskim.