, :
autoloader.php. PSR-4. Acme .
, Lib/, ( ).
<?php
spl_autoload_register(function ($class) {
$prefix = 'Acme\\';
$base_dir = __DIR__ . '/Lib/';
$len = strlen($prefix);
if (strncmp($prefix, $class, $len) !== 0) {
return;
}
$relative_class = substr($class, $len);
$file = $base_dir . str_replace('\\', '/', $relative_class) . '.php';
print $file;
if (file_exists($file)) {
require $file;
}
});
spl_autoload_register /, PRS-4.
, Database Lib/Base/Database.php.
<?php
namespace Acme\Base;
class Database
{
private $db;
public function __construct(\PDO $db)
{
$this->db = $db;
}
public function allUsers()
{
return [
[
'username' => 'Bob',
'role' => 'member'
],
[
'username' => 'Joe',
'role' => 'admin'
]
];
}
}
, , autoloader.php script, .
<?php
require_once 'autoloader.php';
$config = require 'config.php';
try {
$dbc = new PDO("mysql:dbname={$config['MYSQL']['DATABASE']};host={$config['MYSQL']['HOST']}",
$config['MYSQL']['USERNAME'], $config['MYSQL']['PASSWORD']);
} catch (PDOException $e) {
die('Could not connect to database ' . $e->getMessage());
}
$db = new \Acme\Database($dbc);
print_r($db->allUsers());
, , . :
<?php
return [
'MYSQL' => [
'USERNAME' => 'root',
'PASSWORD' => '',
'DATABASE' => 'test',
'HOST' => 'localhost'
]
];
:
$config = require 'config.php';
:
$config['MYSQL']['USERNAME'];
\PDO Database . Injection of Dependency.
: Lib/Services/UserService.php:
<?php
namespace Acme\Services;
class UserService
{
...
}
( ):
$userService = new \Acme\Services\UserService;
Composer. , Packagist, . PSR- * ( PSR4).