php's fig and psrs

65
PHP’s FIG and PSRs* *or how to come up with a title made up of acronyms miércoles 6 de noviembre de 13

Upload: javier-lopez

Post on 11-May-2015

2.599 views

Category:

Technology


1 download

DESCRIPTION

An introduction to the FIG and PSR in the PHP scene

TRANSCRIPT

Page 1: PHP's FIG and PSRs

PHP’s FIG and PSRs*

*or how to come up with a title made up of acronyms

miércoles 6 de noviembre de 13

Page 2: PHP's FIG and PSRs

ABOUT ME

miércoles 6 de noviembre de 13

Page 3: PHP's FIG and PSRs

I was born in Spain

I work in London

Javier López

miércoles 6 de noviembre de 13

Page 4: PHP's FIG and PSRs

Lead Engineer at Time OutPreviously worked for IPC Media and Sensio Labs

miércoles 6 de noviembre de 13

Page 5: PHP's FIG and PSRs

www.desymfony.com

me

miércoles 6 de noviembre de 13

Page 6: PHP's FIG and PSRs

AGENDA

miércoles 6 de noviembre de 13

Page 7: PHP's FIG and PSRs

1. FIG

2. PSRs

3. SWN

miércoles 6 de noviembre de 13

Page 8: PHP's FIG and PSRs

Framework InteroperabilityGroup

#1

miércoles 6 de noviembre de 13

Page 9: PHP's FIG and PSRs

David Zülke M. Dowling Ivan Habunek Kris Wallsmith Paul Jones Larry Masters Jordi Boggiano

Leo Feyer G. Blanco Larry Garfield André Romcke K. Dambekalns Lukas Smith Don Gilbert

Taylor Otwell Nate Abele Brett Bieber Nils Adermann Mike van Riel Paul Dragoonis Will Durand

P. Sturgeon Evert Pot John Mertic B. Schussek Cal Evans Alex. Makarov Pádraic Brady

miércoles 6 de noviembre de 13

Page 10: PHP's FIG and PSRs

Do you want to become a member?

miércoles 6 de noviembre de 13

Page 11: PHP's FIG and PSRs

PHPStandardsRecomendation

#2

miércoles 6 de noviembre de 13

Page 12: PHP's FIG and PSRs

PSR-0 Autoloading

PSR-1 Basic Coding Standards

PSR-2 Coding Style Guide

PSR-3 Logger Interface

miércoles 6 de noviembre de 13

Page 13: PHP's FIG and PSRs

PSR-0Autoloading

miércoles 6 de noviembre de 13

Page 14: PHP's FIG and PSRs

\<Vendor Name>\(<Namespace>\)*<Class Name>

miércoles 6 de noviembre de 13

Page 15: PHP's FIG and PSRs

/path/to/lib/vendor/Doctrine/Common/IsolatedClassLoader.php

\Doctrine\Common\IsolatedClassLoader

miércoles 6 de noviembre de 13

Page 16: PHP's FIG and PSRs

/path/to/lib/vendor/Zend/Acl.php

\Zend\Acl

miércoles 6 de noviembre de 13

Page 17: PHP's FIG and PSRs

/path/to/lib/vendor/Vendor/Package/Class/Subclass.php

\Vendor\Package\Class_Subclass

miércoles 6 de noviembre de 13

Page 18: PHP's FIG and PSRs

/path/to/lib/vendor/Vendor/With_Underscores/Class.php

\Vendor\With_Underscores\Class

miércoles 6 de noviembre de 13

Page 19: PHP's FIG and PSRs

SplClassLoader implementation

http://gist.github.com/221634

miércoles 6 de noviembre de 13

Page 20: PHP's FIG and PSRs

Composer

http://getcomposer.org

miércoles 6 de noviembre de 13

Page 21: PHP's FIG and PSRs

PSR-1Basics Coding Standards

miércoles 6 de noviembre de 13

Page 22: PHP's FIG and PSRs

Files must use only <?php and <? tags

miércoles 6 de noviembre de 13

Page 23: PHP's FIG and PSRs

Files SHOULD either declare symbols or cause side-effects but SHOULD NOT do both.

miércoles 6 de noviembre de 13

Page 24: PHP's FIG and PSRs

Namespaces and classes follow PSR-0

miércoles 6 de noviembre de 13

Page 25: PHP's FIG and PSRs

Class names declared in StuldyCaps

miércoles 6 de noviembre de 13

Page 26: PHP's FIG and PSRs

Class constants MUST beUPPERCASED_WITH_UNDERSCORES_SEPARATORS

miércoles 6 de noviembre de 13

Page 27: PHP's FIG and PSRs

Class methods declared in camelCase

miércoles 6 de noviembre de 13

Page 28: PHP's FIG and PSRs

PSR-2Coding Styling Guide

miércoles 6 de noviembre de 13

Page 29: PHP's FIG and PSRs

Namespaces and classes follow PSR-1

miércoles 6 de noviembre de 13

Page 30: PHP's FIG and PSRs

<?phpnamespace Vendor\Package;

use FooInterface;use BarClass as Bar;use OtherVendor\OtherPackage\BazClass;

class Foo extends Bar implements FooInterface{ public function sampleFunction($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 }}

miércoles 6 de noviembre de 13

Page 31: PHP's FIG and PSRs

<?phpnamespace Vendor\Package;

use FooInterface;use BarClass as Bar;use OtherVendor\OtherPackage\BazClass;

class Foo extends Bar implements FooInterface{ public function sampleFunction($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 }}

\LF

\LF

\LF

\LF

\LF

\LF

\LF

\LF

\LF

\LF

\LF

\LF\LF

\LF

\LF

\LF

\LF

\LF

\LF

\LF

\LFmiércoles 6 de noviembre de 13

Page 32: PHP's FIG and PSRs

<?phpnamespace Vendor\Package;

use FooInterface;use BarClass as Bar;use OtherVendor\OtherPackage\BazClass;

class Foo extends Bar implements FooInterface{ public function sampleFunction($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 }}

80 120

miércoles 6 de noviembre de 13

Page 33: PHP's FIG and PSRs

<?phpnamespace Vendor\Package;

use FooInterface;use BarClass as Bar;use OtherVendor\OtherPackage\BazClass;

class Foo extends Bar implements FooInterface{ public function sampleFunction($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 }}

miércoles 6 de noviembre de 13

Page 34: PHP's FIG and PSRs

PHP keywords all lowercase

miércoles 6 de noviembre de 13

Page 35: PHP's FIG and PSRs

true, false and null all lowercase

miércoles 6 de noviembre de 13

Page 36: PHP's FIG and PSRs

<?phpnamespace Vendor\Package;

use FooInterface;use BarClass as Bar;use OtherVendor\OtherPackage\BazClass;

class Foo extends Bar implements FooInterface{ public function sampleFunction($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 }}

\LF

\LF

miércoles 6 de noviembre de 13

Page 37: PHP's FIG and PSRs

<?phpnamespace Vendor\Package;

use FooInterface;use BarClass as Bar;use OtherVendor\OtherPackage\BazClass;

class Foo extends Bar implements FooInterface{ public $foo = null;

final public static function bar($arg1, &$arg2) { // body }}

miércoles 6 de noviembre de 13

Page 38: PHP's FIG and PSRs

<?phpnamespace Vendor\Package;

use FooInterface;use BarClass as Bar;use OtherVendor\OtherPackage\BazClass;

class Foo extends Bar implements FooInterface{ public $foo = null;

final public static function bar($arg1, &$arg2) { // body }}

miércoles 6 de noviembre de 13

Page 39: PHP's FIG and PSRs

<?phpnamespace Vendor\Package;

use FooInterface;use BarClass as Bar;use OtherVendor\OtherPackage\BazClass;

class Foo extends Bar implements FooInterface{ public $foo = null;

final public static function bar($arg1, &$arg2) { // body }}

miércoles 6 de noviembre de 13

Page 40: PHP's FIG and PSRs

<?phpnamespace Vendor\Package;

use FooInterface;use BarClass as Bar;use OtherVendor\OtherPackage\BazClass;

class Foo extends Bar implements FooInterface{ public $foo = null;

final public static function bar($arg1, &$arg2) { // body }}

miércoles 6 de noviembre de 13

Page 41: PHP's FIG and PSRs

<?phpnamespace Vendor\Package;

use FooInterface;use BarClass as Bar;use OtherVendor\OtherPackage\BazClass;

class Foo extends Bar implements FooInterface{ public $foo = null;

final public static function bar($arg1, &$arg2) { // body }}

miércoles 6 de noviembre de 13

Page 42: PHP's FIG and PSRs

<?phpnamespace Vendor\Package;

use FooInterface;use BarClass as Bar;use OtherVendor\OtherPackage\BazClass;

class Foo extends Bar implements FooInterface{ public $foo = null;

final public static function bar($arg1, &$arg2) { // body }}

miércoles 6 de noviembre de 13

Page 43: PHP's FIG and PSRs

<?phpnamespace Vendor\Package;

use FooInterface;use BarClass as Bar;use OtherVendor\OtherPackage\BazClass;

class Foo extends Bar implements FooInterface{ public $foo = null;

final public static function bar($arg1, &$arg2) { // body }}

miércoles 6 de noviembre de 13

Page 44: PHP's FIG and PSRs

<?phpnamespace Vendor\Package;

use FooInterface;use BarClass as Bar;use OtherVendor\OtherPackage\BazClass;

class Foo extends Bar implements FooInterface{ public $foo = null;

final public static function bar($arg1, &$arg2) { // body }}

miércoles 6 de noviembre de 13

Page 45: PHP's FIG and PSRs

<?phpnamespace Vendor\Package;

use FooInterface;use BarClass as Bar;use OtherVendor\OtherPackage\BazClass;

class Foo extends Bar implements FooInterface{ public $foo = null;

final public static function bar($arg1, &$arg2) { // body }}

miércoles 6 de noviembre de 13

Page 46: PHP's FIG and PSRs

and the list goes on and on and on

http://www.php-fig.org/psr/psr-2/

... methods and function calls ... control structures ... closures ... multiple lines ...

miércoles 6 de noviembre de 13

Page 47: PHP's FIG and PSRs

> phpcs --standard=PSR2 *.php

https://github.com/squizlabs/PHP_CodeSniffer

miércoles 6 de noviembre de 13

Page 48: PHP's FIG and PSRs

> php php-cs-fixer.phar fix .

https://github.com/fabpot/PHP-CS-Fixer

miércoles 6 de noviembre de 13

Page 49: PHP's FIG and PSRs

PSR-3Logger Interface

miércoles 6 de noviembre de 13

Page 50: PHP's FIG and PSRs

<?php

namespace Psr\Log;

interface LoggerInterface{ public function alert($message, array $context = array());

public function critical($message, array $context = array());

public function error($message, array $context = array());

public function warning($message, array $context = array());

public function notice($message, array $context = array());

public function info($message, array $context = array());

public function debug($message, array $context = array());

public function log($level, $message, array $context = array());}

miércoles 6 de noviembre de 13

Page 51: PHP's FIG and PSRs

Emergency – the system is unusable

Alert – immediate action is required

Critical – critical conditions

Error – errors that do not require immediate attention but should be monitored

Warning – unusual or undesirable occurrences that are not errors

Notice – normal but significant events

Info – interesting events

Debug – detailed information for debugging purposes

http://tools.ietf.org/html/rfc5424

RFC 5424

miércoles 6 de noviembre de 13

Page 52: PHP's FIG and PSRs

$message = "{DB}: SELECT * FROM user";$context = array("DB" => "MY_PROJECT");

$logger->debug($message, $context); // "MY PROJECT": SELECT * FROM user"

miércoles 6 de noviembre de 13

Page 53: PHP's FIG and PSRs

Helper classes and interfaces

miércoles 6 de noviembre de 13

Page 54: PHP's FIG and PSRs

<?php

namespace Psr\Log;

abstract class AbstractLogger implements LoggerInterface{    public function emergency($message, array $context = array())    {        $this->log(LogLevel::EMERGENCY, $message, $context);    }

. . .

    public function debug($message, array $context = array())    {        $this->log(LogLevel::DEBUG, $message, $context);    }}

miércoles 6 de noviembre de 13

Page 55: PHP's FIG and PSRs

<?php

namespace Psr\Log;

trait LoggerTrait{    public function emergency($message, array $context = array())    {        $this->log(LogLevel::EMERGENCY, $message, $context);    }

. . .

    abstract public function log($level, message, array $context)}

miércoles 6 de noviembre de 13

Page 56: PHP's FIG and PSRs

<?php

namespace Psr\Log;

class NullLogger extends AbstractLogger{ public function log($level, $message, array $context = array()) {

}}

miércoles 6 de noviembre de 13

Page 57: PHP's FIG and PSRs

<?php

namespace Psr\Log;

interface LoggerAwareInterface{ public function setLogger(LoggerInterface $logger);}

miércoles 6 de noviembre de 13

Page 58: PHP's FIG and PSRs

<?php

namespace Psr\Log;

class LogLevel{ const EMERGENCY = 'emergency'; const ALERT = 'alert'; const CRITICAL = 'critical'; const ERROR = 'error'; const WARNING = 'warning'; const NOTICE = 'notice'; const INFO = 'info'; const DEBUG = 'debug';}

miércoles 6 de noviembre de 13

Page 59: PHP's FIG and PSRs

https://github.com/php-fig/log

miércoles 6 de noviembre de 13

Page 60: PHP's FIG and PSRs

{    "require": {        "psr/log": "dev-master"    }}

miércoles 6 de noviembre de 13

Page 61: PHP's FIG and PSRs

Monolog

https://github.com/Seldaek/monolog

miércoles 6 de noviembre de 13

Page 62: PHP's FIG and PSRs

SoWhatNow?

#3

miércoles 6 de noviembre de 13

Page 63: PHP's FIG and PSRs

PSR-4?

miércoles 6 de noviembre de 13

Page 64: PHP's FIG and PSRs

My humble opinion

miércoles 6 de noviembre de 13

Page 65: PHP's FIG and PSRs

Thanks! Questions?

@loalf

miércoles 6 de noviembre de 13