PSR
PHP Standards Recommendations
FIG
Framework Interoperability Group
Process
- Pre-Draft
- Draft
- Review
- Accepted
- Deprecated
- Abandoned
PSR 0 (deprecated)
Remplacé par le PSR-4
PSR 1 & PSR 2
Pour un code tout propre
<?php
namespace Vendor\Package;
use FooInterface;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;
class Foo extends Bar implements FooInterface
{
public function sampleMethod($a, $b = null)
{
if ($a === $b) {
bar();
} elseif ($a > $b) {
$foo->bar($arg1);
} else {
BazClass::bar($arg2, $arg3);
}
}
final public static function bar()
{
// method body
}
}
PSR 3
LoggerInterface
<?php
namespace Psr\Log;
interface LoggerInterface
{
public function emergency(string $message, array $context = array()): void;
public function alert(string $message, array $context = array()): void;
public function critical(string $message, array $context = array()): void;
public function error(string $message, array $context = array()): void;
public function warning(string $message, array $context = array()): void;
public function notice(string $message, array $context = array()): void;
public function info(string $message, array $context = array()): void;
public function debug(string $message, array $context = array()): void;
public function log(string $level, $message, array $context = array()): void;
}
PSR 4
Autoloader
\Graf\Framework | ./lib |
---|---|
\Graf\Framework\Demo\Server | ./lib/Demo/Server.php |
PSR 6
Caching Interface
<?php
namespace Psr\Cache;
interface CacheItemInterface
{
public function getKey(): string;
public function get();
public function isHit(): bool;
public function set($value);
public function expiresAt($expiration);
public function expiresAfter($time);
}
<?php
namespace Psr\Cache;
interface CacheItemPoolInterface
{
public function getItem(string $key): CacheItemInterface;
public function getItems(array $keys = array()): iterable;
public function hasItem(string $key): bool;
public function clear(): bool;
public function deleteItem(string $key): bool;
public function deleteItems(array $keys): bool;
public function save(CacheItemInterface $item): bool;
public function saveDeferred(CacheItemInterface $item): bool;
public function commit(): bool;
}
PSR 16
"Simple" Caching Interface
<?php
namespace Psr\SimpleCache;
interface CacheInterface
{
public function get(string $key, $default = null);
public function set(string $key, $value, $ttl = null): bool;
public function delete(string $key): bool;
public function clear(): bool;
public function getMultiple(iterable $keys, $default = null);
public function setMultiple(iterable $values, $ttl = null): bool;
public function deleteMultiple(iterable $keys): bool;
public function has(string $key): bool;
}
PSR 7
HTTP message interfaces
<?php
namespace Psr\Http\Message;
interface MessageInterface
{
public function getProtocolVersion(): string;
public function withProtocolVersion(string $version): self;
public function getHeaders(): array;
public function hasHeader(string $name): bool;
public function getHeader(string $name): array;
public function getHeaderLine(string $name): string;
public function withHeader(string $name, $value): self;
public function withAddedHeader(string $name, $value): self;
public function withoutHeader(string $name): self;
public function getBody(): StreamInterface;
public function withBody(StreamInterface $body): self;
}
<?php
namespace Psr\Http\Message;
interface ServerRequestInterface extends RequestInterface
{
public function getServerParams(): array;
public function getCookieParams(): array;
public function withCookieParams(array $cookies): self;
public function getQueryParams(): array;
public function withQueryParams(array $query): self;
public function getUploadedFiles(): array;
public function withUploadedFiles(array $uploadedFiles): self;
public function getParsedBody();
public function withParsedBody($data): self;
public function getAttributes(): array;
public function getAttribute(string $name, $default = null);
public function withAttribute(string $name, $value): self;
public function withoutAttribute(string $name): self;
}
<?php
namespace Psr\Http\Message;
interface RequestInterface extends MessageInterface
{
public function getRequestTarget(): string;
public function withRequestTarget($requestTarget): self;
public function getMethod(): string;
public function withMethod(string $method): self;
public function getUri(): UriInterface;
public function withUri(UriInterface $uri, bool $preserveHost = false): self;
}
PSR 11
ContainerInterface
<?php
namespace Psr\Container;
interface ContainerInterface
{
public function get(string $id);
public function has(string $id): bool;
}
PSR 13
Link Interfaces
<?php
namespace Psr\Link;
interface LinkInterface
{
public function getHref(): string;
public function isTemplated(): bool;
public function getRels(): array;
public function getAttributes(): array ;
}
Draft
PSR 5 (draft)
PHPDoc
PSR 8 (draft)
Huggable Interface
PSR 9 & 10 (draft)
Security Reporting
PSR 12 (draft)
Encore plus de règles de formatage
<?php
namespace Vendor\Package;
use FooClass;
use BarClass as Bar;
use Vendor\Package\Namespace\{
SubnamespaceOne\ClassA,
SubnamespaceOne\ClassB,
SubnamespaceTwo\ClassY,
ClassZ,
};
class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
// constants, properties, methods
}
PSR 14 (draft)
Event Manager
<?php
namespace Psr\EventManager;
interface EventManagerInterface
{
public function attach(string $event, callable $callback, int $priority = 0): bool;
public function detach(string $event, callable $callback): bool;
public function clearListeners(string $event): void;
public function trigger($event, $target = null, $argv = array());
}
PSR 15 (draft)
HTTP Middlewares
<?php
namespace Psr\Http\ServerMiddleware;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
interface MiddlewareInterface
{
public function process(
ServerRequestInterface $request,
DelegateInterface $delegate
): ResponseInterface;
}
PSR 17 (draft)
HTTP Factories
<?php
namespace Psr\Http\Message;
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\UriInterface;
interface RequestFactoryInterface
{
public function createRequest($method, $uri): RequestInterface;
}
interface ResponseFactoryInterface
{
public function createResponse($code = 200): ResponseInterface;
}