SlideShare a Scribd company logo
1 of 128
Download to read offline
Preparing for PHP 7.1 workshop
Damien Seguy @exakat
Warsaw, Poland, October 2016
Full ahead to PHP 7. 1
• Changing version is always a big challenge
• Backward incompatibilities
• New features
• Learn, spot, fix, repeat
0
Speaker
• Damien Seguy
• CTO at exakat
• Static code analysis for PHP
Synopsis
• What is in the next version ?
• Where in my code ?
• How to replace this ?
• Get documentation
• Find issue
• Fix code
Migration to PHP 7.1
• Migration to PHP 7.0, 7.1 and 7.2 / 8.0
• From PHP 5.6
• No framework, no libraries
• Tools, experience, discipline
Destination
Living on the edge
• http://php.net/manual/en/migration70.php
• Online
• UPGRADING TO PHP 7
• Free Book, PDF
• Davey Shafik is RM for PHP 7.1
• Lots of blogs and articles
Living on the bleeding edge
https://github.com/php/php-src/blob/master/
UPGRADING
https://github.com/php/php-src/blob/master/NEWS
https://wiki.php.net/rfc
http://bugs.php.net/
• PHP has 3 phases
• syntax
• definitions
• execution
Where does code break?
Checked with phplint
Checked with tests
Checked code review
<?php
function splitNames($fullname, $fullname) {
   list($first, $last) = split($fullname, ' ');
}
?>
Where will code break?
SyntaxDefinitionsExecution
Tools for migration
• Your own experience with your code
• Lint
• Search
• Static analysis
• Logs
Linting PHP 7
PHP linting
• command line : php -l filename.php
• Spot parse errors
• Works on files only :
• For directories, see composer phplint/phplint
PHP linting
Error messages

in PHP
0
550
1100
1650
2200
5.0 5.1 5.2 5.3 5.4 5.5 5.6 7.0 7.1 7.2
Total Distinct
Backward unlintable code
Code focused on current versions
Backward unlintable code
Redefinition of parameter
<?php
function foo($a, $a, $a) {
  print $a."n";
}
foo('x', 'y', 'z');
?>
Switch statements only contain one default clause
<?php   
switch($x) {   
    case '1' :    
        break;   
    default :    
        break;   
    default :    
        break;   
    case '2' :    
        break;   
}   
Switch statements may only contain one default
clause
switch($x) {   
    case 1 :    
        break;   
    case 0+1 :    
        break;   
    case '1' :    
        break;   
    case true :    
        break;   
    case 1.0 :    
        break;   
    case $y :    
        break;   
}   
Deprecated features
• Not happening if a parent case has a __constructor()

• Not happening if the class is in a namespace

• Use the E_DEPRECATED error level while in DEV
Methods with the same name as their class will not
be constructors in a future version of PHP; foo has
a deprecated constructor
php -l with other versions
• syntax error, unexpected 'new' (T_NEW)
• Assigning the return value of new by reference is
deprecated (PHP 5.6)
• PHP 7 -> PHP 5.6
$o =& new Stdclass();
Migration to PHP 7.1
• Lint with
• PHP 7.1
• PHP 7.2 (or src)
• PHP 5.6 (current), PHP 7.0
• PHP 5.5, 5.4,… (manual)
PHP 7 linting
• Pre-commit
• Use different versions
• Be ruthless with unlintable files
• PHP has 3 phases
• syntax
• definitions
• execution
Where does code break?
Checked with phplint
Checked with tests
Checked code review
Static analysis
Presentation
• Review code without executing it
• Common in C/C++, Java, Javascript
• Hot subject coming to PHP
GREP/SEARCH
• Any searching facility
• Pro : High speed, great for keyword search, universal
• Cons : Little repeat value, no PHP semantics
Grep on PHP code
1318 reports
doc/_ext/configext.py: parts = text.split("']['")
js/codemirror/lib/codemirror.js: var change = {from: pos, to: pos, text: splitLines(t
po/zh_CN.po:"example: address can be split into street, city, country and
libraries/Advisor.php: public static function splitJustification($rule)
libraries/plugins/ImportCsv.php: $tmp = preg_split('/,( ?)/', $csv_columns);
libraries/Config.php: // split file to lines
Static analysis
PHP 5 / 7
Calisthenics
ClearPHP
Performance
 
 

Static analysis tools
PHP7mar
PHP7cc
Phan
Exakat
PHP inspections
PHP7mar
• PHP 7 Migration Assistant Report (MAR)
• Alexia : https://github.com/Alexia/php7mar
• Works with regex
• Produces a .md file
12 results
PHP7cc
• PHP 7 Compatibility Checker
• Authored by sstalle
• https://github.com/sstalle/php7cc
• PHP 5, works with "nikic/php-parser": "~1.4"
• Display to stdout
8.506s 3 results 27 analysis
php ~/.composer/vendor/bin/php7cc library/
File: /Users/famille/Desktop/analyze/library/Analyzer/Analyzer.php
> Line 231: Function argument(s) returned by "func_get_args" might have been modified
func_get_args();
File: /Users/famille/Desktop/analyze/library/Analyzer/Functions/MarkCallable.php
> Line 32: Nested by-reference foreach loop, make sure there is no iteration over the same array
foreach ($lists as $id => &$function) {
}
File: /Users/famille/Desktop/analyze/library/Tasks/Analyze.php
> Line 118: Possible adding to array on the last iteration of a by-reference foreach loop
$dependencies[$v] = $dep;
Checked 873 files in 8.506 seconds
PHAN
• Static analysis for PHP
• Inited by Rasmus, under work at Etsy
• https://github.com/etsy/phan
• PHP 7 only, with ext/ast
• php ~/.composer/vendor/bin/phan -f phan.in -3 vendor -
o phan.out
11.244s 333 results
PhanUndeclaredProperty Reference to undeclared property processed
PhanUndeclaredProperty Reference to undeclared property stdclass->results
PhanNonClassMethodCall Call to method relateTo on non-class type null
PhanStaticCallToNonStatic Static call to non-static method loadercypher::saveTokenCounts() defined at library//L
PhanAccessPropertyProtected Cannot access protected property tokenizertoken::$alternativeEnding
PhanTypeMismatchArgument Argument 1 (atom) is string but analyzerstructuresuseconstant::atomfunctionis() t
PhanUndeclaredClassMethod Call to method __construct from undeclared class reportsxmlwriter
PhanUndeclaredVariable Variable $r is undeclared
84 analysis
Exakat
• Static analysis engine for PHP
• https://github.com/exakat/exakat
• PHP 5.2 to 7.2; Uses Neo4j 2.3 and Gremlin 3
• php exakat.phar project -p name
20 mins6798 results260 analysis
PHP inspections
Static analysis engine for within the IDE
Vladimir Reznichenko
https://bitbucket.org/kalessil/phpinspectionsea
Written in Java
Runs from within PHPstorm
Write your own?
• https://github.com/exakat/php-static-analysis-tools.git
• PHP 7 : use ext/ast
• PHP 5 :"nikic/php-parser"
• Avoid regex (but it does work)
PHP 7 : what changes?
• Incompatible changes
• New features
• Features/Incompatibilities from PHP 5.6 => 7.2
How to spot issues?
• Code knowledge
• lint
• Grep / Search
• Static analysis
• Logs / error_reporting
• Unit Tests
What to replace 

them with ?
Incompatibilities
Incompatibilities
• Removed features
• Added features
• Collateral damages
Removed features
Removed extensions
• Extensions
• ereg
• mssql
• mysql
• sybase_ct
• mcrypt (7.1)
Removed extensions
• ext/ereg
• ereg
• ereg_replace
• split
• sql_regcase
Removed functions
• call_user_method() 

• call_user_method_array()

• Repleacable by $funcname

• Replaced by call_user_func() and call_user_func_array()

• Partially replaced by variadic
Removed variables
• $HTTP_RAW_POST_DATA
• Replace it by php://input
• php://input is now reusable
• Since PHP 5.5
Removed INI
• sql.safe_mode (PHP 7.2)
• mbstring.internal_encoding
• mbstring.http_output
• mbstring.http_input
• iconv.internal_encoding
• iconv.input_encoding
• iconv.output_encoding
default_charset
}
default_charset
• htmlentities()

• PHP 5.3 : ISO-8859-1

• PHP 5.4 : UTF-8

• PHP 5.6 : default_charset (also UTF 8)
Where to look for ?
• default_charset

• Search for ini_set, ini_get, ini_get_all, ini_restore, get_cfg_var

• Search in php.ini, .htaccess

• Search for htmlentities(), html_entity_decode() and htmlspecialchars()
Preg_replace and /e
• preg_replace(‘/ /e’, ‘evaled code’, $haystack)
• replaced by
• preg_replace_callback_array()
preg_replace(‘/  /e’, ‘evaled code’, $haystack)
preg_replace_callback_array([‘/  /’ => $closure], 
$haystack) 
preg_replace_callback(‘/  /’,
$closure], 
$haystack) 
preg_replace_callback_array
<?php 
$code = "abbbb";
$spec = 'c';
echo preg_replace_callback_array(
    array(
        "/a/" => function($matches) {
                        return strtoupper($matches[0]);
                 },
        "/b/" => function($matches) use ($spec) {
static $i = 0;
$i++;
               return "B$i$spec";
        }
    ), $code);
AB1cB2cB3cB4c
preg_replace()
<?php  
$code = "abcde"; 
echo preg_replace( 
    array( '/a/', '/b/'), 
    array( 'f' , 'g'),
    $code);
fgcde
mb_eregi?_replace also drops /e in 7.2
<?php  
$code = "abcde"; 
echo preg_replace( 
    array( '/a/', '/b/'), 
    array( 'f' , 'g'),
    $code);
fgcde
Can't call dynamically!
• $func()
• call_user_func()
• array_map()
• or similar
• extract()
• compact()
• get_defined_vars()
• func_get_args()
• func_get_arg()
• func_num_args()
• parse_str() with one argument
• mb_parse_str() with one argument
• assert() with a string argument
Added features
Added definitions
Functions Classes Constants
5.3 40 2 80
5.4 0 9 78
5.5 12 11 57
5.6 1 10 10
7.0 10 10 41
7.1 7 2 15
7.2 0 0 0
Total 766 92 1163
Name impact
• get_resources(), intdiv(), is_iterable(), mb_scrub()
• PREG_JIT_STACKLIMIT_ERROR
• class Date (from PHP 5.1)
• Error (new class in PHP 7)
New functions
• intdiv()
• get_resources()
• random_bytes(), random_int()
• error_clear_last()
• gc_mem_caches()
• preg_replace_callback_array()
Collaterals
Invalid octals are invalid
• Upgraded from silent to Fatal error
PHP Parse error: Invalid numeric literal in test.php
<?php 
$x = 0890;
More invalid octals in strings
<?php  
var_dump("000" === "400");
• PHP 7.1
https://wiki.php.net/rfc/octal.overload-checking
Invalid numeric are signaled
PHP 7.1
Notice: A non well formed numeric value encountered in
<?php
echo "1 monkey" + "2 bananas";
More reserved keywords
• bool, int, float, string, null, true, false are no
more available for class / interface / traits names
mixed, numeric, object, resource

are reserved for future use
void 

is reserved in 7.1
More relaxed keywords
• Almost all PHP keywords are now authorized inside
classes
• Methods and constants
• Except for class, which can't be a class constant name.
<?php    
class foo {
   const instanceof = 1;
   function use() {
       $this->while(4) + foo::instanceof;
   }
}
More strict keywords
• $this is not available anymore
• Not as argument
• Not as variable
• Not as global
• Not as static
• Not as property
• Not as reference
• Not via extract()
<?php
function foo($this) {
   echo $this;
}
Strings may be invalid
• Upgraded to Fatal error
<?php 
echo "u{1F418}n";
> php56 test.php
u{1F418}
> php70 test.php
🐘
<?php 
echo "niu{119} mu{f3}wiu{119} pu{f3} po
u{142}u{15b}";
//nię mówię pó połśku
Strings may be invalid
• Upgraded to Fatal error
<?php 
echo "u{Yes}n";
PHP Parse error:
Invalid UTF-8 codepoint escape sequence
in test.php on line 3
u{
Hexadecimal numeric strings
• Also, -0 !!
<?php  
var_dump(1 + 0xf);
var_dump(1 + "0xf");
$ php56 test.php
int(16)
int(16)
$ php70 test.php
int(16)
int(1)
Warning for strings (7.1)
Upgraded to Fatal error
<?php  
print "2" + "4";
print "3 elephpants" + "4 dolphins";
print "2" + "d4 d";
6
7
2
Warning: A non-numeric value encountered
Exceptions
• Upgraded to Fatal error
Throwable
Exception
LogicException RuntimeException
BadFunctionCall
Exception
BadMethodCall
Exception
DomainException
InvalidArgument
Exception
OutOfRange
Exception
OutOfBou
ndsExcep
tion
Overflow
Exception
RangeExcep
tion
Error
ParseError
DivisionBy
ZeroError
Assertion
Error
Exceptions
• Exception is not the top exception type anymore
• It is now the 'throwable' interface
• Impact on Exception handler
• Avoid type hinting until moved to PHP 7
• Impact on Error handler
• Impact on catch() clauses
More catching exceptions
• Parser errors now throw a ParseError object. Error
handling for eval()
<?php
try {
  eval($somePHPcode);
} catch( ParseError $e) {
   log($e->getMessage());
  // attempt to fix this or error handling
}
More catching exceptions
Parser errors now throw a ParseError object. Error
handling for eval()
<?php 
try { 
  $file = new finfo(FILEINFO_NONE,$magic_file); 
} catch( ParseError $e) { 
   log($e->getMessage()); 
  // attempt to fix this or error handling 
}
And more catching exceptions
Parser errors now throw a ParseError object. Error
handling for eval()
<?php 
try { 
  $random = random_bytes(10);  
} catch( TypeError $e) { 
  // invalid parameter
} catch( Error $e) { 
  // invalid length
} catch( Exception $e) { 
  // no source of randomness
} 
Even more catching exceptions
<?php
try {
   attemptSomething();
} catch (RuntimeException $e) {
  fixSomething();
} catch (InvalidArgumentException $e) {
  fixSomething();
} catch (BadFunctioncallException $e) {
  fixSomethingElse();
} 
Even more catching exceptions
Federate error catching in catch clause
<?php
try {
   attemptSomething();
} catch (RuntimeException| 
InvalidArgumentException|
 BadFunctioncallException $e) {
  fixSomething();
} 
Even more catching exceptions
<?php
//try really harder
try {
   attemptSomething();
} catch (Exception $e) {
   attemptSomething();
} 
Negative string offset (7.1)
• Upgraded to Fatal error
<?php  
$string = "abcde";
print $string[-3];
print "$string[3]";
print "$string[-2]";
c
d
Parse error: syntax error, unexpect
(T_STRING) or variable (T_VARIABLE)
PHP 7.1 : list() with keys =>
<?php 
  
$array = ['a' => 1, 'b' => 5, 'c' => 3];
// Assigns to $a, $b and $c in the same order
list($a, $b, $c) = $array; 
// Assigns to $a, $b and $c from the keys 
//"a", "b" and "c", respectively 
list("a" => $a, "c" => $c, "b" => $b) = $array;
list("a" => $a, "b" => $b, "c" => $c) = $array;
list("c" => $c, "a" => $a, "b" => $b) = $array;
Short syntax for list()
<?php 
$array = ['a' => 1, 'b' => 5, 'c' => 3];
["a" => $a, "b" => $b, "c" => $c] = $array;  
// Works even when nested
$array = [['a' => 1, 'b' => 5], ['c' => 3]];
[["a" => $a, "b" => $b], ["c" => $c]] = $array;
Call-time pass-by-reference
• References are in the function signature

• Deprecated warnings until PHP 7

• Upgraded to Parse error in PHP 7
<?php  
$a = 3;  
function f($b) {  
    $b++;  
}  
f(&$a);  
print $a;  
?>
PHP Parse error: syntax error, unexpected '&' in …
Incompatible context
<?php 
class A { 
     function f() { echo get_class($this); } 
} 
A::f(); 
?>
Notice: Undefined variable: $this inA
Deprecated: Non-static methodA::f() should not be called statically
Notice: Undefined variable: $this inA
Easy to spot
• Use the E_DEPRECATED or strict while in DEV
Strict Standards: Non-static method A::f()
should not be called statically in test.php on
line 6
Deprecated: Non-static method A::f() should
not be called statically in test.php on line 6
Changed behavior
Changed behavior
• Indirect expressions
func_get_arg()
• func_get_arg() and func_get_args() now return current argument values
<?php 
function foo($a, $b, $c) { 
  print_r(func_get_args()); 
  ++$a; 
  print_r(func_get_args()); 
} 
foo(1,2,3);
Array
(
[0] => 1
[1] => 2
[2] => 3
)
Array
(
[0] => 2
[1] => 2
[2] => 3
)
Usort()
<?php
$array = array(
    'foo',
    'bar',
    'php'
);
usort($array, function($a, $b) {
    return 0;
}
);
print_r($array);
Array
(
[0] => php
[1] => bar
[2] => foo
)
Array
(
[0] => foo
[1] => bar
[2] => php
)
PHP 5
PHP 7
Automatically fixed
It is not safe to rely on the system's timezone
settings. You are required to use the
date.timezone setting or the
date_default_timezone_set() function. In case
you used any of those methods and you are
still getting this warning, you most likely
misspelled the timezone identifier.
New features
New features
• Breaks backward compatibility sometimes
• FUD
• Search for places to apply them like for incompatibilities
New features
• Fixing
• Modernization
• New features
Fixing
Don't hide in parentheses
<?php
function getArray() {
    return [1, 2, 3];
}
function squareArray(array &$a) {
    foreach ($a as &$v) {
        $v **= 2;
    }
}
// Generates a warning in PHP 7.
squareArray((getArray()));
?>
• Parenthesis in 

arguments won't 

mask error anymore
Constant arrays
• Lots of properties should be constants
<?php  
class Version { 
    const SUPPORTED = ['1.0', '1.1', '2.0', '2.1'];
    private $an_array = [1,2,3,4];
    public function isSupported($x) { 
        return isset(Version::SUPPORTED[$x]);
    } 
}
Modernization
Foreach update the actual array
<?php
$array = [0];
foreach ($array as $k => &$val) {
    print "$kn";
    $array[] = 1;
}
?>
0
1
2
3
4
5
6
7
8
9
10
11
0
PHP 5 PHP 7
Closure binding
• Code automation

• Keep it simple

• Won’t accept functioncalls

• Won't accept variables
<?php
class Hello {
  private $hello = "Hello";
  function makeClosure() {
   return function() {
    echo $this->hello;
  };
}
$obj = new Hello();
$closure = $obj->makeClosure();
$closure();
Closure binding
• Code automation

• Keep it simple

• Won’t accept functioncalls

• Won't accept variables
<?php
class   {
  private $hello = " ";
}
$obj = new Hello();
$closure = $obj->makeClosure();
$nihao = new  ();
$closure2 = $closure->bindTo($nihao);
$closure2();
Closure binding
• Code automation

• Keep it simple

• Won’t accept functioncalls

• Won't accept variables
<?php
$closure = function() {
    echo $this->hello;
};
class   {
  private $hello = " ";
}
$nihao = new  ();
$closure->call($nihao);
session_start($options)
<?php
// PHP 5.6
ini_set('session.name','session');
ini_set('session.gc_probability',1);
ini_set('session.gc_divisor',1);
session_start();
// PHP 7.0
session_start(['name'  => 'session',
'gc_probability' => 1,
'gc_divisor'  => 1 ]
);
dirname() second argument
<?php  
$path = '/a/b/c/d/e/f';
// PHP 5.6
$root = dirname(dirname(dirname($x)));
// PHP 7
$root = dirname($path, 3);
?>
Parameters evolution (7.1)
• get_headers() has an extra parameter

• Passing a custom stream context

• getenv() doesn't need parameter

• all the current environment variables will be returned
Really new
Null-coalesce
• Shorter way to give a test for NULL and failover
<?php 
// PHP 5.6
$x = $_GET['x'] === null ? 'default' : $_GET['x'];
// PHP 7.0
$x = $_GET['x'] ?? 'default';
?>
Spaceship operator
• Very Cute <=>

• Replaces a lot of code

• Mainly useful for usort()
<?php 
// PHP 5.6
if ($a > $b) {
 echo 1;
} elseif ($a < $b) {
  echo -1;
} else {
  echo 0;
}
// PHP 7.0
echo $a <=> $b; // 0
Generators delegation
<?php  
function factors($limit) { 
    yield 2; 
    yield 3;
    yield from primeTill1000();
    for ($i = 1001; $i <= $limit; $i += 2) { 
        yield $i; 
    }
} 
$prime = 1357; 
foreach (factors(sqrt($prime)) as $n) { 
    echo "$n ". ($prime % $n ? ' not ' : '') . " factorn"; 
}
Generators returns <?php   
function factors($limit) {  
    return 'first';
    yield 2;  
    return 'second';
    yield 3; 
    return 'third';
    yield 5; 
}  
$gen = factors(sqrt($prime));
foreach ($gen as $n) {  
    echo "$nn";
    if ($n == 3) {break 1;}
}
print $gen->getReturn();
// second
• Generators returns

• The last return is accessible

• The generator returns the final state
Scalar typehint
• Whenever type is tested =>
<?php  
function foo($x) {
   if (!is_string($x)) {
     throw new Exception('Type error while calling ' .
__FUNCTION__);
   } ...
}
<?php  
function foo(string $x) {
...
}
Scalar typehint back in 5.6
• Whenever type is tested =>
<?php   
function foo(string $x) { }
foo('that');
Catchable fatal error: Argument 1 passed to

foo() must be an instance of string,
string given, called in file..
Various scalar typehint
• int, float

• string, bool

• true, false, null

• void (PHP 7.1)

• mixed, object,
resource, numeric
(RFU)
<?php
function foo(?int $a, 
float $b, 
float $c) : ?int {
    return $a + $b + $c;
}
echo foo(null, 2,1);    // 4
echo foo(1.2, 2, 1);    // 4
echo foo(1, 2.2, 1);    // 4
echo foo(1, 2.7, 1.4);  // 5
Return type hint
<?php
function getData($login) : user {
   if (userExists($login)) {
     return userDetails($login);
   } else {
     return null;
  }
}
• scalar, array, callable, class or interfaces

void (PHP 7.1)
Option for strict typing
<?php
// Enable strict types
declare(strict_types=1);
declare(encoding='ISO-8859-1');
declare(ticks=1);
namespace FooBar;
foo('that'); 
Minimum args in custom functions is Fatal error
scalar, array, callable, class or interfaces
void (PHP 7.1)
<?php
function foo(?int $a, float $b, float $c) {
    return $a + $b + $c;
}
echo foo(2,   1);    
Minimum args number Fatal error: Uncaught Error: 

Too few arguments to function foo(), 2 passed in
Omitted
• Assertions
• Grouped assertions
• opening tags that were dropped
Summary
• Check the manuals
• PHP lint is your friend
• Search in the code
• Use static analysis tools
Thank you! Damien Seguy @exakat dseguy@exakat.io
https://www.exakat.io/
The end

More Related Content

What's hot

Automatic PHP 7 Compatibility Checking Using php7cc (and PHPCompatibility)
Automatic PHP 7 Compatibility Checking Using php7cc (and PHPCompatibility)Automatic PHP 7 Compatibility Checking Using php7cc (and PHPCompatibility)
Automatic PHP 7 Compatibility Checking Using php7cc (and PHPCompatibility)Mark Niebergall
 
Debugging PHP with Xdebug - PHPUK 2018
Debugging PHP with Xdebug - PHPUK 2018Debugging PHP with Xdebug - PHPUK 2018
Debugging PHP with Xdebug - PHPUK 2018Mark Niebergall
 
The secret of PHP7's Performance
The secret of PHP7's Performance The secret of PHP7's Performance
The secret of PHP7's Performance Xinchen Hui
 
Caching and tuning fun for high scalability @ FrOSCon 2011
Caching and tuning fun for high scalability @ FrOSCon 2011Caching and tuning fun for high scalability @ FrOSCon 2011
Caching and tuning fun for high scalability @ FrOSCon 2011Wim Godden
 
Static Analysis of PHP Code – IPC Berlin 2016
Static Analysis of PHP Code – IPC Berlin 2016Static Analysis of PHP Code – IPC Berlin 2016
Static Analysis of PHP Code – IPC Berlin 2016Rouven Weßling
 
Php7 傳說中的第七隻大象
Php7 傳說中的第七隻大象Php7 傳說中的第七隻大象
Php7 傳說中的第七隻大象bobo52310
 
The why and how of moving to PHP 5.4/5.5
The why and how of moving to PHP 5.4/5.5The why and how of moving to PHP 5.4/5.5
The why and how of moving to PHP 5.4/5.5Wim Godden
 
Triton and symbolic execution on gdb
Triton and symbolic execution on gdbTriton and symbolic execution on gdb
Triton and symbolic execution on gdbWei-Bo Chen
 
The why and how of moving to PHP 5.5/5.6
The why and how of moving to PHP 5.5/5.6The why and how of moving to PHP 5.5/5.6
The why and how of moving to PHP 5.5/5.6Wim Godden
 
PHP 5.6 New and Deprecated Features
PHP 5.6  New and Deprecated FeaturesPHP 5.6  New and Deprecated Features
PHP 5.6 New and Deprecated FeaturesMark Niebergall
 
Php7 hhvm and co
Php7 hhvm and coPhp7 hhvm and co
Php7 hhvm and coPierre Joye
 
What is the Joomla Framework and why do we need it?
What is the Joomla Framework and why do we need it?What is the Joomla Framework and why do we need it?
What is the Joomla Framework and why do we need it?Rouven Weßling
 
typemap in Perl/XS
typemap in Perl/XS  typemap in Perl/XS
typemap in Perl/XS charsbar
 
Inside the JVM - Follow the white rabbit!
Inside the JVM - Follow the white rabbit!Inside the JVM - Follow the white rabbit!
Inside the JVM - Follow the white rabbit!Sylvain Wallez
 
How to deploy node to production
How to deploy node to productionHow to deploy node to production
How to deploy node to productionSean Hess
 
PHPcon Poland - Static Analysis of PHP Code – How the Heck did I write so man...
PHPcon Poland - Static Analysis of PHP Code – How the Heck did I write so man...PHPcon Poland - Static Analysis of PHP Code – How the Heck did I write so man...
PHPcon Poland - Static Analysis of PHP Code – How the Heck did I write so man...Rouven Weßling
 

What's hot (20)

Automatic PHP 7 Compatibility Checking Using php7cc (and PHPCompatibility)
Automatic PHP 7 Compatibility Checking Using php7cc (and PHPCompatibility)Automatic PHP 7 Compatibility Checking Using php7cc (and PHPCompatibility)
Automatic PHP 7 Compatibility Checking Using php7cc (and PHPCompatibility)
 
Debugging PHP with Xdebug - PHPUK 2018
Debugging PHP with Xdebug - PHPUK 2018Debugging PHP with Xdebug - PHPUK 2018
Debugging PHP with Xdebug - PHPUK 2018
 
The secret of PHP7's Performance
The secret of PHP7's Performance The secret of PHP7's Performance
The secret of PHP7's Performance
 
Caching and tuning fun for high scalability @ FrOSCon 2011
Caching and tuning fun for high scalability @ FrOSCon 2011Caching and tuning fun for high scalability @ FrOSCon 2011
Caching and tuning fun for high scalability @ FrOSCon 2011
 
Static Analysis of PHP Code – IPC Berlin 2016
Static Analysis of PHP Code – IPC Berlin 2016Static Analysis of PHP Code – IPC Berlin 2016
Static Analysis of PHP Code – IPC Berlin 2016
 
Php7 傳說中的第七隻大象
Php7 傳說中的第七隻大象Php7 傳說中的第七隻大象
Php7 傳說中的第七隻大象
 
The why and how of moving to PHP 5.4/5.5
The why and how of moving to PHP 5.4/5.5The why and how of moving to PHP 5.4/5.5
The why and how of moving to PHP 5.4/5.5
 
Triton and symbolic execution on gdb
Triton and symbolic execution on gdbTriton and symbolic execution on gdb
Triton and symbolic execution on gdb
 
The why and how of moving to PHP 5.5/5.6
The why and how of moving to PHP 5.5/5.6The why and how of moving to PHP 5.5/5.6
The why and how of moving to PHP 5.5/5.6
 
PHP 5.6 New and Deprecated Features
PHP 5.6  New and Deprecated FeaturesPHP 5.6  New and Deprecated Features
PHP 5.6 New and Deprecated Features
 
Php7 hhvm and co
Php7 hhvm and coPhp7 hhvm and co
Php7 hhvm and co
 
Introduction to Perl
Introduction to PerlIntroduction to Perl
Introduction to Perl
 
Php’s guts
Php’s gutsPhp’s guts
Php’s guts
 
What is the Joomla Framework and why do we need it?
What is the Joomla Framework and why do we need it?What is the Joomla Framework and why do we need it?
What is the Joomla Framework and why do we need it?
 
typemap in Perl/XS
typemap in Perl/XS  typemap in Perl/XS
typemap in Perl/XS
 
Inside the JVM - Follow the white rabbit!
Inside the JVM - Follow the white rabbit!Inside the JVM - Follow the white rabbit!
Inside the JVM - Follow the white rabbit!
 
How to deploy node to production
How to deploy node to productionHow to deploy node to production
How to deploy node to production
 
PHPcon Poland - Static Analysis of PHP Code – How the Heck did I write so man...
PHPcon Poland - Static Analysis of PHP Code – How the Heck did I write so man...PHPcon Poland - Static Analysis of PHP Code – How the Heck did I write so man...
PHPcon Poland - Static Analysis of PHP Code – How the Heck did I write so man...
 
PHP7 is coming
PHP7 is comingPHP7 is coming
PHP7 is coming
 
Hacking with hhvm
Hacking with hhvmHacking with hhvm
Hacking with hhvm
 

Similar to Preparing code for Php 7 workshop

Similar to Preparing code for Php 7 workshop (20)

Php 7 compliance workshop singapore
Php 7 compliance workshop singaporePhp 7 compliance workshop singapore
Php 7 compliance workshop singapore
 
Migrating to PHP 7
Migrating to PHP 7Migrating to PHP 7
Migrating to PHP 7
 
Peek at PHP 7
Peek at PHP 7Peek at PHP 7
Peek at PHP 7
 
TAKING PHP SERIOUSLY - Keith Adams
TAKING PHP SERIOUSLY - Keith AdamsTAKING PHP SERIOUSLY - Keith Adams
TAKING PHP SERIOUSLY - Keith Adams
 
ZendCon 08 php 5.3
ZendCon 08 php 5.3ZendCon 08 php 5.3
ZendCon 08 php 5.3
 
Damien seguy php 5.6
Damien seguy php 5.6Damien seguy php 5.6
Damien seguy php 5.6
 
PHP7: Hello World!
PHP7: Hello World!PHP7: Hello World!
PHP7: Hello World!
 
What To Expect From PHP7
What To Expect From PHP7What To Expect From PHP7
What To Expect From PHP7
 
Upstate CSCI 450 PHP Chapters 5, 12, 13
Upstate CSCI 450 PHP Chapters 5, 12, 13Upstate CSCI 450 PHP Chapters 5, 12, 13
Upstate CSCI 450 PHP Chapters 5, 12, 13
 
PHP Profiling/performance
PHP Profiling/performancePHP Profiling/performance
PHP Profiling/performance
 
Php
PhpPhp
Php
 
Php
PhpPhp
Php
 
Php
PhpPhp
Php
 
Wt unit 4 server side technology-2
Wt unit 4 server side technology-2Wt unit 4 server side technology-2
Wt unit 4 server side technology-2
 
Php7 HHVM and co
Php7 HHVM and coPhp7 HHVM and co
Php7 HHVM and co
 
PHP from soup to nuts Course Deck
PHP from soup to nuts Course DeckPHP from soup to nuts Course Deck
PHP from soup to nuts Course Deck
 
Basics PHP
Basics PHPBasics PHP
Basics PHP
 
What's new in PHP 7.1
What's new in PHP 7.1What's new in PHP 7.1
What's new in PHP 7.1
 
Keynote: O PHP, Where Art Thou?
Keynote: O PHP, Where Art Thou?Keynote: O PHP, Where Art Thou?
Keynote: O PHP, Where Art Thou?
 
Last train to php 7
Last train to php 7Last train to php 7
Last train to php 7
 

More from Damien Seguy

Strong typing @ php leeds
Strong typing  @ php leedsStrong typing  @ php leeds
Strong typing @ php leedsDamien Seguy
 
Strong typing : adoption, adaptation and organisation
Strong typing : adoption, adaptation and organisationStrong typing : adoption, adaptation and organisation
Strong typing : adoption, adaptation and organisationDamien Seguy
 
Qui a laissé son mot de passe dans le code
Qui a laissé son mot de passe dans le codeQui a laissé son mot de passe dans le code
Qui a laissé son mot de passe dans le codeDamien Seguy
 
Analyse statique et applications
Analyse statique et applicationsAnalyse statique et applications
Analyse statique et applicationsDamien Seguy
 
Top 10 pieges php afup limoges
Top 10 pieges php   afup limogesTop 10 pieges php   afup limoges
Top 10 pieges php afup limogesDamien Seguy
 
Top 10 php classic traps DPC 2020
Top 10 php classic traps DPC 2020Top 10 php classic traps DPC 2020
Top 10 php classic traps DPC 2020Damien Seguy
 
Meilleur du typage fort (AFUP Day, 2020)
Meilleur du typage fort (AFUP Day, 2020)Meilleur du typage fort (AFUP Day, 2020)
Meilleur du typage fort (AFUP Day, 2020)Damien Seguy
 
Top 10 php classic traps confoo
Top 10 php classic traps confooTop 10 php classic traps confoo
Top 10 php classic traps confooDamien Seguy
 
Tout pour se préparer à PHP 7.4
Tout pour se préparer à PHP 7.4Tout pour se préparer à PHP 7.4
Tout pour se préparer à PHP 7.4Damien Seguy
 
Top 10 php classic traps php serbia
Top 10 php classic traps php serbiaTop 10 php classic traps php serbia
Top 10 php classic traps php serbiaDamien Seguy
 
Top 10 php classic traps
Top 10 php classic trapsTop 10 php classic traps
Top 10 php classic trapsDamien Seguy
 
Top 10 chausse trappes
Top 10 chausse trappesTop 10 chausse trappes
Top 10 chausse trappesDamien Seguy
 
Code review workshop
Code review workshopCode review workshop
Code review workshopDamien Seguy
 
Understanding static analysis php amsterdam 2018
Understanding static analysis   php amsterdam 2018Understanding static analysis   php amsterdam 2018
Understanding static analysis php amsterdam 2018Damien Seguy
 
Review unknown code with static analysis php ce 2018
Review unknown code with static analysis   php ce 2018Review unknown code with static analysis   php ce 2018
Review unknown code with static analysis php ce 2018Damien Seguy
 
Everything new with PHP 7.3
Everything new with PHP 7.3Everything new with PHP 7.3
Everything new with PHP 7.3Damien Seguy
 
Php 7.3 et ses RFC (AFUP Toulouse)
Php 7.3 et ses RFC  (AFUP Toulouse)Php 7.3 et ses RFC  (AFUP Toulouse)
Php 7.3 et ses RFC (AFUP Toulouse)Damien Seguy
 
Tout sur PHP 7.3 et ses RFC
Tout sur PHP 7.3 et ses RFCTout sur PHP 7.3 et ses RFC
Tout sur PHP 7.3 et ses RFCDamien Seguy
 
Review unknown code with static analysis php ipc 2018
Review unknown code with static analysis   php ipc 2018Review unknown code with static analysis   php ipc 2018
Review unknown code with static analysis php ipc 2018Damien Seguy
 
Code review for busy people
Code review for busy peopleCode review for busy people
Code review for busy peopleDamien Seguy
 

More from Damien Seguy (20)

Strong typing @ php leeds
Strong typing  @ php leedsStrong typing  @ php leeds
Strong typing @ php leeds
 
Strong typing : adoption, adaptation and organisation
Strong typing : adoption, adaptation and organisationStrong typing : adoption, adaptation and organisation
Strong typing : adoption, adaptation and organisation
 
Qui a laissé son mot de passe dans le code
Qui a laissé son mot de passe dans le codeQui a laissé son mot de passe dans le code
Qui a laissé son mot de passe dans le code
 
Analyse statique et applications
Analyse statique et applicationsAnalyse statique et applications
Analyse statique et applications
 
Top 10 pieges php afup limoges
Top 10 pieges php   afup limogesTop 10 pieges php   afup limoges
Top 10 pieges php afup limoges
 
Top 10 php classic traps DPC 2020
Top 10 php classic traps DPC 2020Top 10 php classic traps DPC 2020
Top 10 php classic traps DPC 2020
 
Meilleur du typage fort (AFUP Day, 2020)
Meilleur du typage fort (AFUP Day, 2020)Meilleur du typage fort (AFUP Day, 2020)
Meilleur du typage fort (AFUP Day, 2020)
 
Top 10 php classic traps confoo
Top 10 php classic traps confooTop 10 php classic traps confoo
Top 10 php classic traps confoo
 
Tout pour se préparer à PHP 7.4
Tout pour se préparer à PHP 7.4Tout pour se préparer à PHP 7.4
Tout pour se préparer à PHP 7.4
 
Top 10 php classic traps php serbia
Top 10 php classic traps php serbiaTop 10 php classic traps php serbia
Top 10 php classic traps php serbia
 
Top 10 php classic traps
Top 10 php classic trapsTop 10 php classic traps
Top 10 php classic traps
 
Top 10 chausse trappes
Top 10 chausse trappesTop 10 chausse trappes
Top 10 chausse trappes
 
Code review workshop
Code review workshopCode review workshop
Code review workshop
 
Understanding static analysis php amsterdam 2018
Understanding static analysis   php amsterdam 2018Understanding static analysis   php amsterdam 2018
Understanding static analysis php amsterdam 2018
 
Review unknown code with static analysis php ce 2018
Review unknown code with static analysis   php ce 2018Review unknown code with static analysis   php ce 2018
Review unknown code with static analysis php ce 2018
 
Everything new with PHP 7.3
Everything new with PHP 7.3Everything new with PHP 7.3
Everything new with PHP 7.3
 
Php 7.3 et ses RFC (AFUP Toulouse)
Php 7.3 et ses RFC  (AFUP Toulouse)Php 7.3 et ses RFC  (AFUP Toulouse)
Php 7.3 et ses RFC (AFUP Toulouse)
 
Tout sur PHP 7.3 et ses RFC
Tout sur PHP 7.3 et ses RFCTout sur PHP 7.3 et ses RFC
Tout sur PHP 7.3 et ses RFC
 
Review unknown code with static analysis php ipc 2018
Review unknown code with static analysis   php ipc 2018Review unknown code with static analysis   php ipc 2018
Review unknown code with static analysis php ipc 2018
 
Code review for busy people
Code review for busy peopleCode review for busy people
Code review for busy people
 

Recently uploaded

Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 

Recently uploaded (20)

Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 

Preparing code for Php 7 workshop