PHP Procedural
- Microservicios (procedural): endpoints con funciones.
- Monolith MVC
- Modelo Procedural: funciones que consultan la DB.
- Vista Procedural: HTML + variables PHP (include, require).
- Controlador Procedural: Recibe la request ($_GET, $_POST), llama funciones del modelo y carga la vista.
PHP OOP
- Microservicios (OOP): servicios encapsulados en clases y/o alternativa usando DAO.
- Monolith MVC
- Modelo con DAO: DAO para acceso a datos, Modelo para lógica.
- Modelo OOP: Modelo maneja negocio y persistencia en la misma clase.
- Vista OOP: Clases de vista.
- Controlador OOP: Clases controller o front controller.
Ejemplos usando MySQL:
Microservicios (Procedural RESTful)
/api/db.php
<?php
function getConnection(
string $host = "localhost",
string $user = "root",
string $password = "",
string $database = "mi_base"
): mysqli {
$conn = mysqli_connect($host, $user, $password, $database);
if (!$conn) {
die("Error de conexión: " . mysqli_connect_error());
}
return $conn;
}
/api/users/index.php
<?php
header("Content-Type: application/json");
require "users.php";
$method = $_SERVER["REQUEST_METHOD"];
$id = 0;
if (isset($_GET["id"])) {
$id = (int) $_GET["id"];
}
switch ($method) {
case "GET": {
if ($id !== 0) {
echo json_encode(getUserById($id));
} else {
echo json_encode(getUsers());
}
break;
}
case "POST": {
$data = json_decode(file_get_contents("php://input"), true);
echo json_encode(createUser($data));
http_response_code(201);
break;
}
default: {
http_response_code(405);
echo json_encode(array("error" => "Método no permitido"));
break;
}
}
/api/users/users.php
<?php
require __DIR__ . "/../db.php";
function getUsers(): array {
$conn = getConnection();
$sql = "SELECT id, name FROM users";
$result = mysqli_query($conn, $sql);
$usuarios = array();
while ($row = mysqli_fetch_assoc($result)) {
$usuarios[] = $row;
}
mysqli_close($conn);
return $usuarios;
}
function getUserById(int $id): array {
$conn = getConnection();
$stmt = mysqli_prepare($conn, "SELECT id, name FROM users WHERE id = ?");
mysqli_stmt_bind_param($stmt, "i", $id);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
$usuario = mysqli_fetch_assoc($result);
if (!$usuario) {
$usuario = array();
}
mysqli_stmt_close($stmt);
mysqli_close($conn);
return $usuario;
}
function createUser(array $data): array {
$name = "Desconocido";
if (isset($data["name"]) && is_string($data["name"]) && trim($data["name"]) !== "") {
$name = trim($data["name"]);
}
$conn = getConnection();
$stmt = mysqli_prepare($conn, "INSERT INTO users (name) VALUES (?)");
mysqli_stmt_bind_param($stmt, "s", $name);
mysqli_stmt_execute($stmt);
$id = mysqli_insert_id($conn);
mysqli_stmt_close($stmt);
mysqli_close($conn);
return array("id" => (int)$id, "name" => $name);
}
MVC Procedural
modelo.php
<?php
require "db.php";
function getUsers(): array {
$conn = getConnection();
$sql = "SELECT id, name FROM users";
$result = mysqli_query($conn, $sql);
$usuarios = array();
while ($row = mysqli_fetch_assoc($result)) {
$usuarios[] = $row;
}
mysqli_close($conn);
return $usuarios;
}
vista.php
<?php
<h1>Usuarios</h1>
<ul>
<?php
for ($i = 0; $i < count($usuarios); $i++) {
echo "<li>" . htmlspecialchars($usuarios[$i]["name"]) . "</li>";
}
?>
</ul>
controlador.php
<?php
require "modelo.php";
$usuarios = getUsers();
include "vista.php";
Microservicios (OOP RESTful)
/api/db.php
<?php
class Database {
public static function getConnection(
string $host = "localhost",
string $user = "root",
string $password = "",
string $database = "mi_base"
): mysqli {
$conn = new mysqli($host, $user, $password, $database);
if ($conn->connect_error) {
die("Error de conexión: " . $conn->connect_error);
}
return $conn;
}
}
/api/users/index.php
<?php
header("Content-Type: application/json");
require "UserService.php";
$service = new UserService();
$method = $_SERVER["REQUEST_METHOD"];
$id = 0;
if (isset($_GET["id"])) {
$id = (int) $_GET["id"];
}
switch ($method) {
case "GET": {
if ($id !== 0) {
echo json_encode($service->getUserById($id));
} else {
echo json_encode($service->getUsers());
}
break;
}
case "POST": {
$data = json_decode(file_get_contents("php://input"), true);
echo json_encode($service->createUser($data));
http_response_code(201);
break;
}
default: {
http_response_code(405);
echo json_encode(array("error" => "Método no permitido"));
break;
}
}
/api/users/UserService.php
<?php
require __DIR__ . "/../db.php";
class UserService {
public function getUsers(): array {
$conn = Database::getConnection();
$sql = "SELECT id, name FROM users";
$result = $conn->query($sql);
$usuarios = array();
while ($row = $result->fetch_assoc()) {
$usuarios[] = $row;
}
$conn->close();
return $usuarios;
}
public function getUserById(int $id): array {
$conn = Database::getConnection();
$stmt = $conn->prepare("SELECT id, name FROM users WHERE id = ?");
$stmt->bind_param("i", $id);
$stmt->execute();
$result = $stmt->get_result();
$usuario = $result->fetch_assoc();
if (!$usuario) {
$usuario = array();
}
$stmt->close();
$conn->close();
return $usuario;
}
public function createUser(array $data): array {
$name = "Desconocido";
if (isset($data["name"]) && is_string($data["name"]) && trim($data["name"]) !== "") {
$name = trim($data["name"]);
}
$conn = Database::getConnection();
$stmt = $conn->prepare("INSERT INTO users (name) VALUES (?)");
$stmt->bind_param("s", $name);
$stmt->execute();
$id = $conn->insert_id;
$stmt->close();
$conn->close();
return array("id" => (int)$id, "name" => $name);
}
}
Microservicios (OOP RESTful con DAO)
/api/users/UserDAO.php
<?php
require __DIR__ . "/../db.php";
class UserDAO {
public function getAll(): array {
$conn = Database::getConnection();
$sql = "SELECT id, name FROM users";
$result = $conn->query($sql);
$usuarios = array();
while ($row = $result->fetch_assoc()) {
$usuarios[] = $row;
}
$conn->close();
return $usuarios;
}
public function getById(int $id): array {
$conn = Database::getConnection();
$stmt = $conn->prepare("SELECT id, name FROM users WHERE id = ?");
$stmt->bind_param("i", $id);
$stmt->execute();
$result = $stmt->get_result();
$usuario = $result->fetch_assoc();
if (!$usuario) {
$usuario = array();
}
$stmt->close();
$conn->close();
return $usuario;
}
public function create(array $data): array {
$name = "Desconocido";
if (isset($data["name"]) && is_string($data["name"]) && trim($data["name"]) !== "") {
$name = trim($data["name"]);
}
$conn = Database::getConnection();
$stmt = $conn->prepare("INSERT INTO users (name) VALUES (?)");
$stmt->bind_param("s", $name);
$stmt->execute();
$id = $conn->insert_id;
$stmt->close();
$conn->close();
return array("id" => (int)$id, "name" => $name);
}
}
/api/users/UserService.php
<?php
require "UserDAO.php";
class UserService {
private UserDAO $dao;
public function __construct() {
$this->dao = new UserDAO();
}
public function getUsers(): array {
return $this->dao->getAll();
}
public function getUserById(int $id): array {
return $this->dao->getById($id);
}
public function createUser(array $data): array {
return $this->dao->create($data);
}
}
/api/users/index.php
<?php
header("Content-Type: application/json");
require "UserService.php";
$service = new UserService();
$method = $_SERVER["REQUEST_METHOD"];
$id = 0;
if (isset($_GET["id"])) {
$id = (int) $_GET["id"];
}
switch ($method) {
case "GET": {
if ($id !== 0) {
echo json_encode($service->getUserById($id));
} else {
echo json_encode($service->getUsers());
}
break;
}
case "POST": {
$data = json_decode(file_get_contents("php://input"), true);
echo json_encode($service->createUser($data));
http_response_code(201);
break;
}
default: {
http_response_code(405);
echo json_encode(array("error" => "Método no permitido"));
break;
}
}
MVC OOP
Modelo con DAO
UserDAO.php
<?php
require "db.php";
class UserDAO {
public function getAll(): array {
$conn = Database::getConnection();
$sql = "SELECT id, name FROM users";
$result = $conn->query($sql);
$usuarios = array();
while ($row = $result->fetch_assoc()) {
$usuarios[] = $row;
}
$conn->close();
return $usuarios;
}
}
UserModel.php
<?php
require "UserDAO.php";
class UserModel {
private UserDAO $dao;
public function __construct() {
$this->dao = new UserDAO();
}
public function allUsers(): array {
return $this->dao->getAll();
}
}
Modelo OOP (sin DAO, todo en la clase)
UserModel.php
<?php
require "db.php";
class UserModel {
public function allUsers(): array {
$conn = Database::getConnection();
$sql = "SELECT id, name FROM users";
$result = $conn->query($sql);
$usuarios = array();
while ($row = $result->fetch_assoc()) {
$usuarios[] = $row;
}
$conn->close();
return $usuarios;
}
}
Vista OOP
UserView.php
<?php
class UserView {
public function render(array $usuarios): void {
?>
<h1>Usuarios</h1>
<ul>
<?php
for ($i = 0; $i < count($usuarios); $i++) {
echo "<li>" . htmlspecialchars($usuarios[$i]["name"]) . "</li>";
}
?>
</ul>
<?php
}
}
Controlador OOP (Clases Controller)
UserController.php
<?php
require "UserModel.php";
require "UserView.php";
class UserController {
private UserModel $model;
private UserView $view;
public function __construct() {
$this->model = new UserModel();
$this->view = new UserView();
}
public function index(): void {
$usuarios = $this->model->allUsers();
$this->view->render($usuarios);
}
}
$controller = new UserController();
$controller->index();
Controlador OOP (Front Controller)
index.php
<?php
require "UserController.php";
$path = "users/index";
if (isset($_GET["path"])) {
$path = $_GET["path"];
}
$parts = explode("/", $path);
if (count($parts) === 2) {
$controllerName = $parts[0];
$method = $parts[1];
if ($controllerName === "users") {
$controller = new UserController();
if (method_exists($controller, $method)) {
$controller->$method();
} else {
echo "404 Not Found";
}
} else {
echo "404 Not Found";
}
} else {
echo "404 Not Found";
}
Deja una respuesta
Lo siento, debes estar conectado para publicar un comentario.