Hola :
Bueno, yo voy a dar mi consideracion.
El uso de patrones de disenno es en realidad una metodologia de como realizar buenas practicas de programacion; no esta limitado nunca a ningun lenguaje en especifico.
Esto no quiere decir que no existan libros o articulos hablando de patrones y su implementacion en PHP, pero insisto, que los patrones que existen son mas bien genericos y representan metodologias de como programar ( a grandes rasgos, no estoy definiendo que cosa es un patron de disenno claro esta ).
Ahora, el uso de los patrones ( que existen muchisimos, he revisado mas de 40 patrones que son bastante utilizados ) en PHP depende del programador y si deberia ser bastante utilizado.
Voy a poner un ejemplo, el patron Singleton y el uso de Factorys se utiliza bastante, aunque no sea demasiado beneficioso para el caso del PHP4 por su propio manejo de clases, pero si se utiliza y aporta mucha flexibilidad y claridad al codigo.
Hay patrones de Acceso a Componentes de Datos ( DAC, similar al manejo que da .NET a este tema ) que al menos yo utilizo 100% de las veces que necesito interactuar con una DB y siempre me resulta muy util, como ademas le aporta flexibilidad, claridad entre otras al codigo, aqui envio un ejemplo:
Factory & DAC :
-> IDACNews [ Esto representa un tipo o interface en el modelo, como en PHP4 no existen tipos o interfaces es algo simblico pero la clase correspondiente presenta estos metodos como significado de implementacion del tipo IDACNews ]
. create ( news )
. read ( news_id )
. get_all_news()
. delete( news_id )
-> Similar para Users y Admins
Código PHP:
class DAC
{
var $db;
function &create( $name, $dac_type="mysql" )
{
if ($dac_type == "mysql") {
switch ( $name )
{
case "news" : return new MySQLNews(); break;
case "users" : return new MySQLUsers(); break;
case "admins" : return new MySQLAdmins(); break;
......
......
default : return null; break;
}
}
if ($dac_type == "ws") {
switch ( $name )
{
case "news" : return new WSNews(); break;
case "users" : return new WSUsers(); break;
case "admins" : return new WSAdmins(); break;
.....
.....
default : return null; break;
}
}
}
}
class MySQLNews extends MySQLDAC //implements IDACNews
{
function create( $news )
{
$sql = sprintf( "INSERT INTO news ( 0, %s )", $news );
return $this->db->execute_non_query ( $sql, true ); }
function read( $id )
{
$sql = "SELECT * FROM news WHERE news_id = %s";
return $this->db->execute_query( sprintf( $sql, $id ) );
}
function get_all_news() {
$sql = "SELECT * from news";
return $this->db->execute_reader( sprintf( $sql ) );
}
function delete( $id )
{
$sql = "DELETE FROM news WHERE news_id = %s";
$this->db->execute_non_query( sprintf( $sql, $id ) );
}
function MySQLNews(){ parent::MySQLDAC(); }
}
.. Similar para Users y Admins
Espero que les haya sido util.
Saludos