SlideShare a Scribd company logo
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/
Preparing code for Php 7 workshop
Preparing code for Php 7 workshop
Preparing code for Php 7 workshop
Preparing code for Php 7 workshop
Preparing code for Php 7 workshop
• 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
Preparing code for Php 7 workshop
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
Preparing code for Php 7 workshop
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

PDF
PHP 7.1 : elegance of our legacy
PDF
Machine learning in php php con poland
ODP
The why and how of moving to php 5.4
PDF
Machine learning in php
PDF
PHP7 - The New Engine for old good train
ODP
The why and how of moving to php 5.4/5.5
PDF
2021.laravelconf.tw.slides2
PPTX
PHP 7 Crash Course - php[world] 2015
PHP 7.1 : elegance of our legacy
Machine learning in php php con poland
The why and how of moving to php 5.4
Machine learning in php
PHP7 - The New Engine for old good train
The why and how of moving to php 5.4/5.5
2021.laravelconf.tw.slides2
PHP 7 Crash Course - php[world] 2015

What's hot (20)

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

Similar to Preparing code for Php 7 workshop (20)

PDF
Php 7 compliance workshop singapore
PDF
Php 7.2 compliance workshop php benelux
PDF
Last train to php 7
PDF
Preparing for the next php version
PDF
Review unknown code with static analysis
PPTX
Migrating to PHP 7
PDF
The why and how of moving to php 8
PDF
Preparing for the next PHP version (5.6)
PDF
The why and how of moving to php 7
ODP
The why and how of moving to php 7.x
PDF
Review unknown code with static analysis Zend con 2017
ODP
Is your code ready for PHP 7 ?
ODP
The why and how of moving to php 7.x
PPTX
Peek at PHP 7
PDF
Static analysis saved my code tonight
PPTX
Learning php 7
PDF
08 Advanced PHP #burningkeyboards
PPTX
PHP7 Presentation
PDF
Code review for busy people
PDF
PHP7: Hello World!
Php 7 compliance workshop singapore
Php 7.2 compliance workshop php benelux
Last train to php 7
Preparing for the next php version
Review unknown code with static analysis
Migrating to PHP 7
The why and how of moving to php 8
Preparing for the next PHP version (5.6)
The why and how of moving to php 7
The why and how of moving to php 7.x
Review unknown code with static analysis Zend con 2017
Is your code ready for PHP 7 ?
The why and how of moving to php 7.x
Peek at PHP 7
Static analysis saved my code tonight
Learning php 7
08 Advanced PHP #burningkeyboards
PHP7 Presentation
Code review for busy people
PHP7: Hello World!
Ad

More from Damien Seguy (20)

PDF
Strong typing @ php leeds
PPTX
Strong typing : adoption, adaptation and organisation
PDF
Qui a laissé son mot de passe dans le code
PDF
Analyse statique et applications
PDF
Top 10 pieges php afup limoges
PDF
Top 10 php classic traps DPC 2020
PDF
Meilleur du typage fort (AFUP Day, 2020)
PDF
Top 10 php classic traps confoo
PDF
Tout pour se préparer à PHP 7.4
PDF
Top 10 php classic traps php serbia
PDF
Top 10 php classic traps
PDF
Top 10 chausse trappes
PDF
Code review workshop
PDF
Understanding static analysis php amsterdam 2018
PDF
Review unknown code with static analysis php ce 2018
PDF
Everything new with PHP 7.3
PDF
Php 7.3 et ses RFC (AFUP Toulouse)
PDF
Tout sur PHP 7.3 et ses RFC
PDF
Review unknown code with static analysis php ipc 2018
PDF
Static analysis saved my code tonight
Strong typing @ php leeds
Strong typing : adoption, adaptation and organisation
Qui a laissé son mot de passe dans le code
Analyse statique et applications
Top 10 pieges php afup limoges
Top 10 php classic traps DPC 2020
Meilleur du typage fort (AFUP Day, 2020)
Top 10 php classic traps confoo
Tout pour se préparer à PHP 7.4
Top 10 php classic traps php serbia
Top 10 php classic traps
Top 10 chausse trappes
Code review workshop
Understanding static analysis php amsterdam 2018
Review unknown code with static analysis php ce 2018
Everything new with PHP 7.3
Php 7.3 et ses RFC (AFUP Toulouse)
Tout sur PHP 7.3 et ses RFC
Review unknown code with static analysis php ipc 2018
Static analysis saved my code tonight

Recently uploaded (20)

PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
PDF
Empathic Computing: Creating Shared Understanding
PDF
KodekX | Application Modernization Development
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
Encapsulation_ Review paper, used for researhc scholars
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Modernizing your data center with Dell and AMD
PPT
Teaching material agriculture food technology
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PDF
Electronic commerce courselecture one. Pdf
PPTX
Big Data Technologies - Introduction.pptx
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
CIFDAQ's Market Insight: SEC Turns Pro Crypto
Empathic Computing: Creating Shared Understanding
KodekX | Application Modernization Development
The AUB Centre for AI in Media Proposal.docx
Encapsulation_ Review paper, used for researhc scholars
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Reach Out and Touch Someone: Haptics and Empathic Computing
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Modernizing your data center with Dell and AMD
Teaching material agriculture food technology
Advanced methodologies resolving dimensionality complications for autism neur...
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
Electronic commerce courselecture one. Pdf
Big Data Technologies - Introduction.pptx
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
Agricultural_Statistics_at_a_Glance_2022_0.pdf
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Mobile App Security Testing_ A Comprehensive Guide.pdf
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf

Preparing code for Php 7 workshop