<slide title="PHP 5.5" section="performance">

<break lines="1" />
<blurb fontsize="6em">Performance Improvements</blurb>
<list fontsize="4em" marginleft="1.5em">
<item>Nested calls</item>
<item>Call stack pre-allocated by compiler</item>
<item>Bundled opcode cache</item>
</list>

<break lines="1" section="generators" />
<blurb fontsize="4em">✔ Generators</blurb>
<example result='0' title=""><![CDATA[<?php
function xrange($start, $end) {
    for ($i = $start; $i <= $end; $i ++) {
        yield $i;
    }
}
foreach (xrange(0, 5) as $i) {
    echo $i, "\n";
}]]></example>

<break lines="1" section="coroutines" />
<blurb fontsize="4em">✔ Coroutines</blurb>
<example result='0' title=""><![CDATA[<?php
function logger($fileName) {
    $fileHandle = fopen($fileName, 'a');
    while (true) {
        fwrite($fileHandle, yield . "\n");
    }
}

$logger = logger(__DIR__ . '/log');
$logger->send('Foo');
$logger->send('Bar');
]]></example>

<break lines="1" />
<blurb>For an advanced explanation of coroutines, read this article by Nikita Popov</blurb>
<link href="http://nikic.github.io/2012/12/22/Cooperative-multitasking-using-coroutines-in-PHP.html">Cooperative multitasking using coroutines</link>

<break lines="1" section="finally" />
<blurb fontsize="4em">✔ finally</blurb>
<example result='0' title=""><![CDATA[<?php
$db = mysqli_connect();
try {
   call_some_function($db);
} finally {
   mysqli_close($db);
}]]></example>

<break lines="1" section="foreachlist" />
<blurb fontsize="4em">✔ list() in foreach</blurb>
<example result='0' title=""><![CDATA[<?php
$names = [ ['John','Smith'], ['Fred','Johnson'] ];
foreach($names as list($first,$last)) { 
    echo $first,$last; 
}]]></example>

<break lines="1" section="constarray" />
<blurb fontsize="4em">✔ Const array/string Dereferencing</blurb>
<example result='0' title=""><![CDATA[<?php
echo array(1, 2, 3)[0]; //output 1
echo "foobar"[3]; //output b
echo [1,3,4][2]; //output 4]]></example>

<break lines="1" section="others" />
<blurb fontsize="4em">✔ empty() support for functions/expressions</blurb>

<break lines="1" />
<blurb fontsize="4em">✔ curl upload functionality rewritten</blurb>

<break lines="1" />
<blurb fontsize="4em">✔ Simplified password hashing API</blurb>
<example result='0' title=""><![CDATA[<?php
// Hash
$hash = password_hash("super secret",PASSWORD_BCRYPT);

// To validate $pwd against the stored hash
if (password_verify($pwd, $hash)) {
    echo 'Password is valid!';
} else {
    echo 'Invalid password.';
}
]]></example>

<break lines="1" section="php55_done"/>
<link href="http://php.net/migration55">php.net/migration55</link>

</slide>
