Cita:
Iniciado por pateketrueke ¿Y tienen que ser clases/objetos necesariamente?
No veo por que no :/
Si son objetos es mucho mas facil de manipular, usar , mas facil de leer etc.
Ahora si empieza con 3 lineas de código en un futuro a lo mejor quiere seguir desarrollando lo y si tiene 1310923812903 funciones que ni dios sabe lo que hacen, pues lo tiene claro. Otra cosa también es que con el tiempo si tiene la estructura buena puede ir ampliando las cosas. Por ejemplo
Código PHP:
<?php
interface IUserLogin
{
public function Login(array $userLoginData);
public function Logout();
}
abstract class User
{
protected $_userName = ""; //username
private $_additionalUserData = array(); // user data
protected function ValidateUserName($username)
{
/// TO DO
}
protected function ValidateUserPassword($username)
{
/// TO DO
return true;
}
public function getUserName()
{
return $this->_userName;
}
protected function AddUserData($key, $data)
{
// TODO: validate $key and $data
$this->_additionalUserData[$key] = $data;
}
protected function GetUserData($key)
{
if(!array_key_exists($key, $this->_additionalUserData))
{
throw new Exception("Key not found");
}
return $this->_additionalUserData[$key];
}
}
class MemberLogin extends User implements IUserLogin
{
public function Login(array $userLoginData)
{
if(!array_key_exists("username", $userLoginData) || !$this->ValidateUserPassword($userLoginData["username"]))
{
throw new Exception("Username is not defined.");
}
// TO DO: Login
$this->_userName = $userLoginData["username"];
}
public function Logout()
{
// TO DO: Logout
}
}
class MemberMessages
{
private $_member = null;
public function __construct(MemberLogin $member)
{
if(($member instanceof IUserLogin) == false)
{
throw new Exception(".....");
}
$this->_member = $member;
}
public function getUnreadedMessages()
{
// TO DO
}
}
$member = new MemberLogin();
$member->Login(array("username" => "bulter", "password" => "rofl"));
$messages = new MemberMessages($member);
$messages->getUnreadedMessages();
?>
Bue es solo una idea nada en concreto. La idea es que tienes una clase abstracta User que tiene todas las funciones que puedan realizar y todas las variable que deban de tener todos los tipos de usuarios. Ahora si mañana quiero tener un panel de administradores puede hacer tranquilo una clases AdminLogin extends User y ya tendré todo lo necesario, aparte ya que tengo el Admin en otra clase lo puedo tener controlado en una forma completamente distinta: la DB que sea con otra estructura, usar una DB distinta , tener unas reglas diferentes que un usuario normal. Otra cosa. Pepito ya sabe como funciona MemberLogin viene y ve AdminLogin pues AdminLogin hereda User pues ya sabe que puede usar dentro las funciones ValidateUserName y getUserName también implementa el interface UserLogin sabra que la función Logout() esta disponible de una forma u otra y no poner en 20 sitios $this->Logout(); y al arrancar el script 20 Errores de que Logout no existe para Admin. El dia siguiente viene Jose y me dice "Tio quiero que las Noticias de la pagina tengan moderadores de mi empresa". Pues perfecto le doy a el acceso a la clase User y a la interfaz UserLogin y puede trabajar y yo estar tranquilo de que no tocara algo que no es cosa suya y sabre que Jose cumple con mis normas y no podra tocar nada de lo mio y de Pepito :D. Luego para cambiar digamos de un Member normal a un Admin ... facilisimo en la clase del Admin pongo otra funcion que tome de argumento objeto MemberLogin y ya tengo todos los datos del usuario ( nombre , pass , additionalData ).
Bueno es una idea básica, este teme se puede desarrollar mucho, mi idea es que es preferente usar clases/objetos y aun mas si se trabaja en equipo o con un proyecto grande.