php's fig and psrs

Post on 11-May-2015

2.598 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

An introduction to the FIG and PSR in the PHP scene

TRANSCRIPT

PHP’s FIG and PSRs*

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

miércoles 6 de noviembre de 13

ABOUT ME

miércoles 6 de noviembre de 13

I was born in Spain

I work in London

Javier López

miércoles 6 de noviembre de 13

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

miércoles 6 de noviembre de 13

www.desymfony.com

me

miércoles 6 de noviembre de 13

AGENDA

miércoles 6 de noviembre de 13

1. FIG

2. PSRs

3. SWN

miércoles 6 de noviembre de 13

Framework InteroperabilityGroup

#1

miércoles 6 de noviembre de 13

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

Do you want to become a member?

miércoles 6 de noviembre de 13

PHPStandardsRecomendation

#2

miércoles 6 de noviembre de 13

PSR-0 Autoloading

PSR-1 Basic Coding Standards

PSR-2 Coding Style Guide

PSR-3 Logger Interface

miércoles 6 de noviembre de 13

PSR-0Autoloading

miércoles 6 de noviembre de 13

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

miércoles 6 de noviembre de 13

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

\Doctrine\Common\IsolatedClassLoader

miércoles 6 de noviembre de 13

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

\Zend\Acl

miércoles 6 de noviembre de 13

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

\Vendor\Package\Class_Subclass

miércoles 6 de noviembre de 13

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

\Vendor\With_Underscores\Class

miércoles 6 de noviembre de 13

SplClassLoader implementation

http://gist.github.com/221634

miércoles 6 de noviembre de 13

Composer

http://getcomposer.org

miércoles 6 de noviembre de 13

PSR-1Basics Coding Standards

miércoles 6 de noviembre de 13

Files must use only <?php and <? tags

miércoles 6 de noviembre de 13

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

miércoles 6 de noviembre de 13

Namespaces and classes follow PSR-0

miércoles 6 de noviembre de 13

Class names declared in StuldyCaps

miércoles 6 de noviembre de 13

Class constants MUST beUPPERCASED_WITH_UNDERSCORES_SEPARATORS

miércoles 6 de noviembre de 13

Class methods declared in camelCase

miércoles 6 de noviembre de 13

PSR-2Coding Styling Guide

miércoles 6 de noviembre de 13

Namespaces and classes follow PSR-1

miércoles 6 de noviembre de 13

<?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

<?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

<?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

<?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

PHP keywords all lowercase

miércoles 6 de noviembre de 13

true, false and null all lowercase

miércoles 6 de noviembre de 13

<?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

<?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

<?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

<?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

<?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

<?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

<?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

<?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

<?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

<?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

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

> phpcs --standard=PSR2 *.php

https://github.com/squizlabs/PHP_CodeSniffer

miércoles 6 de noviembre de 13

> php php-cs-fixer.phar fix .

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

miércoles 6 de noviembre de 13

PSR-3Logger Interface

miércoles 6 de noviembre de 13

<?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

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

$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

Helper classes and interfaces

miércoles 6 de noviembre de 13

<?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

<?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

<?php

namespace Psr\Log;

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

}}

miércoles 6 de noviembre de 13

<?php

namespace Psr\Log;

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

miércoles 6 de noviembre de 13

<?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

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

miércoles 6 de noviembre de 13

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

miércoles 6 de noviembre de 13

Monolog

https://github.com/Seldaek/monolog

miércoles 6 de noviembre de 13

SoWhatNow?

#3

miércoles 6 de noviembre de 13

PSR-4?

miércoles 6 de noviembre de 13

My humble opinion

miércoles 6 de noviembre de 13

Thanks! Questions?

@loalf

miércoles 6 de noviembre de 13

top related