PHP 5.3/5.4 features

Matteo Magni @ilbonzo

23 gennaio 2013
PugBO

Namespace

Problema


Zend/
    Search/
        Lucene/
            Analysis/
                Analyzer.php

class  Zend_Search_Lucene_Analysis_Analyzer {
...
}
        

Define Namespace


namespace Silex;
class Application ...
{
    const VERSION = '1.0-DEV';
        

Use Namespace


use Silex\Application;
use Silex\Provider\TwigServiceProvider;
use Silex\Provider\UrlGeneratorServiceProvider;
use Silex\Provider\ValidatorServiceProvider;

$app = new Application();
$app->register(new UrlGeneratorServiceProvider());

        

Closures / Anonymous function


echo preg_replace_callback('~-([a-z])~', function ($match) {
    return strtoupper($match[1]);
}, 'hello-world');
// outputs helloWorld
        

Anonymous function variable assignment


$greet = function($name)
{
    printf("Hello %s\r\n", $name);
};

$greet('World');
$greet('PHP');
        

Traits


trait Singleton {
    public static function getInstance() { ... }
}
class A {
    use Singleton; // ...
}
class B extends ArrayObject {
    use Singleton; // ...
}
// Singleton method is now available for both classes
A::getInstance();
B::getInstance();
        

Possiamo riusare del codice attraverso l’implementazione di un trait, senza usare l’ereditarietà e la composizione

Short array syntax

$a = [1, 2, 3, 4];
or $a = ['one' => 1, 'two' => 2, 'three' => 3, 'four' => 4];
        

Function Array De-referencing

Possiamo accedere direttamente a un elemento di un array qualora esso fosse il risultato di una funzione o metodo senza doverlo assegnare a una nuova variabile.

function fruits() {
    return ['apple', 'banana', 'orange'];
}
echo fruits()[0]; // Outputs: apple
        

<?= is now always available

Built-in development web server in CLI mode.

% php -S localhost:8000
PHP 5.4.0 Development Server started at Tue Jan 22 22:27:09 2013
Listening on localhost:8080
Document root is /home/bonzo
Press Ctrl-C to quit.
        

Thank you, Question?

Matteo Magni @ilbonzo