<slide title="" section="bc7">

<blurb fontsize="20em" align="center">Top-5 Things that might bite you</blurb>
<break lines="3"/>
<blurb fontsize="1.5em" align="center">For the full list see</blurb>
<link fontsize="1.25em" align="center" margintop="-0.75em" href="http://php.net/manual/en/migration70.php">php.net/migration70</link>

<break lines="1" section="bc7_1"/>
<blurb fontsize="1.1em" align="left">Left-to-right semantics for complicated expressions</blurb>
<example fontsize="1.1em" result='0' title="" type="php"><![CDATA[
$$foo['bar']['baz'] // interpreted as ($$foo)['bar']['baz']
$foo->$bar['baz']   // interpreted as ($foo->$bar)['baz']
$foo->$bar['baz']() // interpreted as ($foo->$bar)['baz']()
Foo::$bar['baz']()  // interpreted as (Foo::$bar)['baz']()
]]></example>

<blurb fontsize="0.8em" align="left">To restore the previous behaviour add explicit curly braces:</blurb>
<example fontsize="1.1em" result='0' title="" type="php"><![CDATA[
${$foo['bar']['baz']}
$foo->{$bar['baz']}
$foo->{$bar['baz']}()
Foo::{$bar['baz']}()
]]></example>
<blurb fontsize="0.8em" align="left">Detection: phan or unit test failures</blurb>

<break lines="1" section="bc7_2"/>
<blurb fontsize="1.1em" align="left">Removed support for /e (PREG_REPLACE_EVAL) modifier</blurb>
<example fontsize="1.1em" result='0' title="" type="php"><![CDATA[
echo preg_replace('/:-:(.*?):-:/e', '$this->pres->\\1', $text);
]]></example>
<blurb fontsize="0.8em" align="left">Change to:</blurb>
<example fontsize="1.1em" result='0' title="" type="php"><![CDATA[
echo preg_replace_callback(
  '/:-:(.*?):-:/', 
  function($matches) {
    return $this->pres->{$matches[1]}; // Careful!
  },
  $text);
]]></example>
<blurb fontsize="0.8em" align="left">Detection: grep, warnings in logs or unit test failures</blurb>

<break lines="1" section="bc7_3"/>
<blurb fontsize="1.1em" align="left">$HTTP_RAW_POST_DATA global removed</blurb>
<example fontsize="1em" result='0' title="" type="php"><![CDATA[
if (empty($GLOBALS['HTTP_RAW_POST_DATA']) &&
    strpos($_SERVER['CONTENT_TYPE'], 'www-form-urlencoded') === false) {
    $GLOBALS['HTTP_RAW_POST_DATA'] = file_get_contents("php://input");
}
]]></example>
<blurb fontsize="0.8em" align="left">Detection: grep, warnings in logs or unit test failures</blurb>

<break lines="1" section="bc7_4"/>
<blurb fontsize="1.1em" align="left">session.lazy_write enabled by default</blurb>
<example fontsize="1.1em" result='0' title="" type="ini"><![CDATA[
session.lazy_write = 0
]]></example>
<blurb fontsize="0.8em" align="left">Detection: Can cause out-of-band session read timing issues</blurb>

<break lines="1" section="bc7_5"/>
<blurb fontsize="1.1em" align="left">Invalid octal literals now produce a parse error</blurb>
<example fontsize="1.1em" result='0' title="" type="php"><![CDATA[
echo 05678; // PHP 5.x outputs 375
]]></example>
<example fontsize="0.5em" result="1" hide="1"><![CDATA[
Parse error: Invalid numeric literal in file.php on line 2
]]></example>
<blurb fontsize="0.8em" align="left">Detecting parse errors is easy: php -l</blurb>
</slide>
