Pentru a intelege mai bine conceptele din spatele OOP, am creat un exemplu foarte simplu, o simpla implementare a modelului arhitectural MVC, implementare care in acest moment nu respecta nici un principiu in programare.Ideea este sa inteleg si sa intelegem impreuna cum acest exemplu poate fi rescris mult mai bine, ce probleme implica in acest moment, ce probleme pot aparea in viitor, in caz ca proiectul evolueaza, respectand principiile in programare, ce beneficii avem pe termen scurt dar si pe termin lung etc.Cu alte cuvinte, discutam despre un proces de Refactoring.
Structura directoarelor:
Proiect
App
Controllers
-UserController.php
Models
-User.php
System
Database
-MysqlDatabaseConnection.php
index.php
Fisierele noastre:
index.php
<?php
require 'app/Controllers/UserController.php';
require 'app/Models/User.php';
require 'system/Database/MysqlDatabaseConnection.php';
// let's assume this data was sent through a POST request
$credentials = [
'username' => 'John Doe',
'email' => '[email protected]',
'password' => '123'
];
$userController = new App\Controllers\UserController();
// pass the credentials to the method
$userController->processSignup($credentials);
UserController.php
<?php namespace App\Controllers;
use App\Models\User;
class UserController
{
private $user;
public function __construct()
{
$this->user = new User();
}
public function getSignup()
{
// render the signup page
}
public function processSignup($data)
{
// validation
if (empty($data['username']) || empty($data['email']) || empty($data['password'])) {
// redirect to the singup page with a message
}
// create a new user using the User model
$this->user->create($data);
// redirect to the signup page with a success message
}
}
User.php
<?php namespace App\Models;
use System\Database\MysqlDatabaseConnection;
class User
{
protected $db;
protected $table = 'users';
public function __construct()
{
$this->db = new MysqlDatabaseConnection('localhost', 'root', '', 'test');
}
public function create($data)
{
// use the database connection and create a new row of records in database
}
}
MysqlDatabaseConnection.php
<?php namespace System\Database;
class MysqlDatabaseConnection
{
public function __construct($host, $username, $password, $dbname)
{
// prepare database connection
}
}
Cred ca acest exemplu este destul de explicit.