SlideShare a Scribd company logo
1 of 88
Download to read offline
GETTING	HANDS	DIRTY
MICHELANGELO	VAN	DAM
PHP	CONSULTANT	&	COMMUNITY	LEADER
Credits:	phpbg	on	flickr.com
AGENDA
WHAT	HAS	CHANGED	SINCE	PHP	5?
WHAT’S	NEW	IN	PHP	7?
OTHER	THINGS	YOU	NEED	TO	KNOW
MIGRATING	PHP	5	APPS	TO	PHP	7
CLOSING	REMARKS	&	QUESTIONS
AGENDA
WHAT	HAS	CHANGED	SINCE	PHP	5?
WHAT’S	NEW	IN	PHP	7?
OTHER	THINGS	YOU	NEED	TO	KNOW
MIGRATING	PHP	5	APPS	TO	PHP	7
CLOSING	REMARKS	&	QUESTIONS
BC	BREAK
CHANGED	BEHAVIOR	IN	PHP	7
Source:	Hernán	Piñera	on	flickr.com
FATAL	ERRORS
๏ Fatal	and	recoverable	fatal	errors	are	now	“Throwable”	
๏ These	errors	inherit	from	“Error”	class	
๏ The	“Errors”	class	is	on	the	same	level	as	ExcepFon	class	
๏ Both	“Errors”	and	“ExcepFons”	implement	“Throwable”	
interface	
๏ Has	an	effect	on:	
๏ “set_excepFon_handler”:	can	receive	Errors	and	ExcepFons	
๏ all	internal	classes	now	throw	ExcepFon	on	construct	failure	
๏ Parse	errors	now	throw	“ParseError”
EXAMPLE	ERROR	PHP	5	VS	7
<?php
$example = new Example();
// PHP 5 error outputs:
// PHP Fatal error:  Class 'Example' not found in php7-workshop/errors.php on line 4
// PHP Stack trace:
// PHP   1. {main}() php7-workshop/errors.php:0
// PHP 7 error outputs:
// PHP Fatal error:  Uncaught Error: Class 'Example' not found in php7-workshop/errors.php:4
// Stack trace:
// #0 {main}
//   thrown in php7-workshop/errors.php on line 4
//
// Fatal error: Uncaught Error: Class 'Example' not found in php7-workshop/errors.php on line 4
//
// Error: Class 'Example' not found in php7-workshop/errors.php on line 4
//
// Call Stack:
//    0.0003     351648   1. {main}() php7-workshop/errors.php:0
EXCEPTION	HANDLING
<?php
function exceptionHandler(Exception $e) {
    echo 'PHP ' . phpversion() . PHP_EOL;
    echo $e->getMessage() . PHP_EOL;
    echo $e->getTraceAsString() . PHP_EOL;
}
set_exception_handler('exceptionHandler');
class Foo
{
    public function bar()
    {
        throw new Exception('foo-bar');
    }
}
$foo = new Foo();
$foo->bar();
// PHP 5.6.4
// foo-bar
// #0 php7-workshop/Errors/errorhandler.php(24): Foo->bar()
// #1 {main}
// PHP 7.0.2
// foo-bar
// #0 php7-workshop/Errors/errorhandler.php(24): Foo->bar()
// #1 {main}
THROWABLE	EXAMPLE
<?php
echo 'PHP ' . phpversion() . PHP_EOL;
try {
    $foo = new foo();
} catch (Exception $e) {
    echo 'I am an exception: ' . $e->getMessage() . PHP_EOL;
} catch (Error $e) {
    echo 'I am an error: ' . $e->getMessage() . PHP_EOL;
} catch (Throwable $t) {
    echo 'I am throwable: ' . $t->getMessage() . PHP_EOL;
}
// PHP 5.6.4
// Fatal error: Class 'foo' not found in 
// php7-workshop/Errors/throwable.php on line 5
// PHP 7.0.2
// I am an error: Class 'foo' not found
VARIABLE	VARIABLES
<?php
echo 'PHP ' . phpversion() . PHP_EOL;
$foo = [
    'bar' => [
        'baz' => 'foo-bar-baz',
        'bay' => 'foo-bar-bay',
    ],
];
echo $foo['bar']['baz'] . PHP_EOL;
$foo = new stdClass();
$foo->bar = ['baz' => 'foo-bar-baz'];
$bar = 'bar';
echo $foo->$bar['baz'] . PHP_EOL;
// PHP 5.6.4
// foo-bar-baz
//
// Warning: Illegal string offset 'baz' in php7-workshop/Variable/
vars.php on line 15
// PHP 7.0.2
// foo-bar-baz
// foo-bar-baz
GLOBALS
<?php
echo 'PHP ' . phpversion() . PHP_EOL;
$a = 'Hello';
$$a = 'World!';
function foo()
{
    global $a, $$a;
    return $a . ' ' . $$a;
}
echo foo() . PHP_EOL;
// PHP 5.6.4
// Hello World!
// PHP 7.0.2
// Hello World!
GLOBALS	(CONT.)
<?php
echo 'PHP ' . phpversion() . PHP_EOL;
$a = 'Hello';
$$a = 'World!';
function foo()
{
    global $a, ${$a};
    return $a . ' ' . ${$a};
}
echo foo() . PHP_EOL;
// PHP 5.6.4
// Hello World!
// PHP 7.0.2
// Hello World!
LIST	ORDER
<?php
list ($a[], $a[], $a[]) = [1, 2, 3];
echo 'PHP ' . phpversion() . ': ' . implode(', ', $a) . PHP_EOL;
// PHP 5.6.4: 3, 2, 1
// PHP 7.0.2: 1, 2, 3
list ($b[], $b[], $b[]) = [3, 2, 1];
echo 'PHP ' . phpversion() . ': ' . implode(', ', $b) . PHP_EOL;
// PHP 5.6.4: 1, 2, 3
// PHP 7.0.2: 3, 2, 1
FOREACH	INTERNAL	POINTER
<?php
echo 'PHP ' . phpversion() . PHP_EOL;
$a = [0, 1, 2];
foreach ($a as &$val) {
    var_dump(current($a));
}
// PHP 5.6.4
// int(1)
// int(2)
// bool(false)
// PHP 7.0.2
// int(0)
// int(0)
// int(0)
FOREACH	ITERATION	ISSUE
<?php
echo 'PHP ' . phpversion() . PHP_EOL;
$a = ['a', 'b', 'c'];
foreach ($a as &$item) {
    echo current($a) . PHP_EOL;
    // When we reach the end, close with double newline
    if (false === current($a)) {
        echo PHP_EOL . PHP_EOL;
    }
}
echo 'Hello World!' . PHP_EOL;
// PHP 5.6.4
// b
// c
//
//
//
// Hello World!
// PHP 7.0.2
// a
// a
// a
// Hello World!
INVALID	OCTALS
<?php
echo 'PHP ' . phpversion() . PHP_EOL;
$a = 0128; // faulty octal
var_dump($a);
// PHP 5.6.4
// int(10) -> PHP converted it to 012
// PHP 7.0.2
// 
// Parse error: Invalid numeric literal in 
//     php7-workshop/Octals/Octals.php on line 4
NEGATIVE	BITSHIFTS
<?php
echo 'PHP ' . phpversion() . PHP_EOL;
var_dump(1 >> -1);
// PHP 5.6.4
// int(0)
// PHP 7.0.2
// PHP Fatal error:  Uncaught ArithmeticError: Bit shift by
//   negative number in php7-workshop/Bitshift/bitshift.php:4
// Stack trace:
// #0 {main}
//   thrown in php7-workshop/Bitshift/bitshift.php on line 4
// 
// Fatal error: Uncaught ArithmeticError: Bit shift by negative
//   number in php7-workshop/Bitshift/bitshift.php on line 4
// 
// ArithmeticError: Bit shift by negative number in
//   php7-workshop/Bitshift/bitshift.php on line 4
// 
// Call Stack:
//     0.0006     352104   1. {main}() php7-workshop/Bitshift/bitshift.php:0
BITSHIFT	OVERFLOW
<?php
echo 'PHP ' . phpversion() . PHP_EOL;
$a = 0b11111111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111;
echo var_export($a >> 1, true) . PHP_EOL;
// PHP 5.3.29
// Parse error: syntax error, unexpected T_STRING in php7-workshop/Bitshift/
outofrangebit.php on line 3
// PHP 5.6.4
// 0
// PHP 7.0.2
// 0
DIVISION	BY	ZERO
<?php
echo 'PHP ' . phpversion() . PHP_EOL;
echo (0 / 0) . PHP_EOL;
echo (3 / 0) . PHP_EOL;
echo (3 / 0) . PHP_EOL;
// PHP 5.6.4
//
// Warning: Division by zero in php7-workshop/Zero/division.php on line 5
// Warning: Division by zero in php7-workshop/Zero/division.php on line 6
// Warning: Division by zero in php7-workshop/Zero/division.php on line 7
// PHP 7.0.2
// Warning: Division by zero in php7-workshop/Zero/division.php on line 5
// NAN
// Warning: Division by zero in php7-workshop/Zero/division.php on line 6
// INF
// Warning: Division by zero in php7-workshop/Zero/division.php on line 7
// INF
HEX	VALUES
<?php
echo 'PHP ' . phpversion() . PHP_EOL;
var_dump("0x123" == "291");
var_dump(is_numeric("0x123"));
var_dump("0xe" + "0x1");
var_dump(substr("foo", "0x1"));
// PHP 5.6.4
// bool(true)
// bool(true)
// int(15)
// string(2) "oo"
// PHP 7.0.2
// bool(false)
// bool(false)
// int(0)
//
// Notice: A non well formed numeric value encountered 
// in php7-workshop/Hex/hex.php on line 8
// string(3) "foo"
REMOVED	FROM	PHP	7
๏ call_user_*	
๏ call_user_method()		->	call_user_func()	
๏ call_user_method_array()		->	call_user_func_array()	
๏ mcrypt_*	
๏ mcrypt_generic_end()		->	mcrypt_generic_deinit()	
๏ mcrypt_ecb()	->	mcrypt_decrypt()	
๏ mcrypt_cbc()	->	mcrypt_decrypt()	
๏ mcrypt_cP()	->	mcrypt_decrypt()	
๏ mcrypt_oP()	->	mcrypt_decrypt()	
๏ datefmt_set_Fmezone_id()	->	datefmt_set_Fmezone()	
๏ IntlDateFormaTer::setTimeZoneID()	->	IntlDateFormaTer::setTimeZone()	
๏ set_magic_quotes_runFme()	
๏ set_socket_blocking()	->	stream_set_blocking()
REMOVED	GD	FUNCTIONS
๏ 	imagepsbbox()	
๏ 	imagepsencodefont()	
๏ 	imagepsextendfont()	
๏ 	imagepsfreefont()	
๏ 	imagepsloadfont()	
๏ 	imagepsslanWont()	
๏ 	imagepstext()
EXT/MYSQL
๏ Deprecated	in	PHP	5.5	
๏ Removed	in	PHP	7	
๏ All	mysql_*	funcFons!!!
WILL	YOU	MISS	IT?!?
๏ script-tag

<script	language="php">		
// PHP code goes here
</script>
๏ ASP-tag

<%		
// PHP code goes here
%>
<%= 'echoing something here' %>
OTHER	REMOVED/CHANGED	ITEMS
๏ php.ini	
๏ always_populate_raw_post_data	
๏ asp_tags	
๏ xsl.security_prefs	
๏ $HTTP_RAW_POST_DATA	->	php://input	
๏ No	#	in	INI	files	with	parse_ini_file()	or	parse_ini_string()	->	use	;	
๏ func_get_arg()	and	func_get_args()	return	always	current	value	of	
arguments	(no	longer	original	values)
AGENDA
WHAT	HAS	CHANGED	SINCE	PHP	5?
WHAT’S	NEW	IN	PHP	7?
OTHER	THINGS	YOU	NEED	TO	KNOW
MIGRATING	PHP	5	APPS	TO	PHP	7
CLOSING	REMARKS	&	QUESTIONS
PHP	7.1	-	WHAT’S	COMING
NEW	FEATURES…
NULLABLE	TYPE
<?php
class Foo
{
    protected $bar;
    public function __construct(string $bar = null)
    {
         if (null !== $bar) {
             $this->bar = $bar;
         }
    }
    public function getBar(): string
    {
        return $this->bar;
    }
}
$foo = new Foo();
$bar = $foo->getBar();
var_dump($bar);
NULLABLE	TYPE
<?php
class Foo
{
    protected $bar;
    public function __construct(?string $bar = null)
    {
         if (null !== $bar) {
             $this->bar = $bar;
         }
    }
    public function getBar(): ?string
    {
        return $this->bar;
    }
}
$foo = new Foo();
$bar = $foo->getBar();
var_dump($bar);
VOID	FUNCTIONS
<?php
class Foo
{
    public function sayHello(string $message): void
    {
        echo 'Hello ' . $message . '!' . PHP_EOL;
    }
}
$foo = new Foo();
$foo->sayHello('World');
SYMMETRIC	ARRAY	DESTRUCTURING
<?php
$talks = [
    [1, 'Getting hands dirty with PHP7'],
    [2, 'Decouple your framework'],
    [3, 'PHPunit speedup with Docker'],
    [4, 'Open source your business for success'],
];
// short-hand list notation
[$id, $title] = $talks[0];
echo sprintf('%s (%d)', $title, $id) . PHP_EOL;
echo PHP_EOL;
// shorthand foreach list notation
foreach ($talks as [$id, $title]) {
    echo sprintf('%s (%d)', $title, $id) . PHP_EOL;
}
SUPPORT	FOR	KEYS	IN	LIST()
<?php 
$talks = [ 
    [1, 'Getting hands dirty with PHP7'], 
    [2, 'Decouple your framework'], 
    [3, 'PHPunit speedup with Docker'], 
    [4, 'Open source your business for success'], 
]; 
// short-hand list notation 
['id' => $id, 'title' => $title] = $talks[0]; 
echo sprintf('%s (%d)', $title, $id) . PHP_EOL; 
echo PHP_EOL; 
// shorthand foreach list notation 
foreach ($talks as ['id' => $id, 'title' => $title]) { 
    echo sprintf('%s (%d)', $title, $id) . PHP_EOL; 
}
CLASS	CONSTANT	VISIBILITY
<?php
class ConstDemo
{
    const PUBLIC_CONST_A = 1;
    public const PUBLIC_CONST_B = 2;
    protected const PROTECTED_CONST = 3;
    private const PRIVATE_CONST = 4;
}
ITERABLE	PSEUDO-TYPE
<?php
function iterator(iterable $iterable)
{
    foreach ($iterable as $value) {
        //
    }
}
MULTI	CATCH	EXCEPTION	HANDLING
<?php
try {
    // some code
} catch (FirstException | SecondException $e) {
    // handle first and second exceptions
}
SUPPORT	FOR	NEGATIVE	STRING	OFFSETS
<?php
$string = 'ThisIsALongString.php';
echo substr($string, 0, strlen($string) - 4) . PHP_EOL;
// Outputs: ThisIsALongString
echo substr($string, 0, -4) . PHP_EOL;
// Outputs: ThisIsALongString
CONVERT	CALLABLES	TO	CLOSURES	WITH	
CLOSURE::FROMCALLABLE()
<?php
class Test
{
    public function exposeFunction()
    {
        return Closure::fromCallable([$this, 'privateFunction']);
    }
    private function privateFunction($param)
    {
        var_dump($param);
    }
}
$privFunc = (new Test)->exposeFunction();
$privFunc('some value');
ASYNCHRONOUS	SIGNAL	HANDLING
<?php
pcntl_async_signals(true); // turn on async signals
pcntl_signal(SIGHUP,  function($sig) {
    echo "SIGHUPn";
});
posix_kill(posix_getpid(), SIGHUP);
HTTP/2	SERVER	PUSH	SUPPORT	IN	EXT/CURL
๏ CURLMOPT_PUSHFUNCTION	
๏ CURL_PUSH_OK	
๏ CURL_PUSH_DENY
PHP	7.1:	THE	NEW	STUFF
NEW	FUNCTIONS
๏ Closure	
๏ Closure::fromCallable()	
๏ CURL	
๏ curl_mulF_errno()	
๏ 	 curl_share_errno()	
๏ 	 curl_share_strerror()	
๏ SPL	
๏ 	 is_iterable()	
๏ PCNTL	
๏ 	 pcntl_async_signals()
NEW	GLOBAL	CONSTANTS
๏ Core	Predefined	Constants	
๏ PHP_FD_SETSIZE	
๏ CURL	
๏ CURLMOPT_PUSHFUNCTION	
๏ CURL_PUST_OK	
๏ CURL_PUSH_DENY	
๏ Data	Filtering	
๏ FILTER_FLAG_EMAIL_UNICODE	
๏ JSON	
๏ JSON_UNESCAPED_LINE_TERMINATORS
NEW	GLOBAL	CONSTANTS	(2)
๏ PostgreSQL	
๏ PGSQL_NOTICE_LAST	
๏ PGSQL_NOTICE_ALL	
๏ PGSQL_NOTICE_CLEAR	
๏ SPL	
๏ MT_RAND_PHP
NEW	GLOBAL	CONSTANTS	(3)
๏ LDAP_OPT_X_SASL_NOCANON	
๏ LDAP_OPT_X_SASL_USERNAME	
๏ LDAP_OPT_X_TLS_CACERTDIR	
๏ LDAP_OPT_X_TLS_CACERTFILE	
๏ LDAP_OPT_X_TLS_CERTFILE	
๏ LDAP_OPT_X_TLS_CIPHER_SUITE	
๏ LDAP_OPT_X_TLS_KEYFILE	
๏ LDAP_OPT_X_TLS_RANDOM_FILE	
๏ LDAP_OPT_X_TLS_CRLCHECK	
๏ LDAP_OPT_X_TLS_CRL_NONE	
๏ LDAP_OPT_X_TLS_CRL_PEER	
๏ LDAP_OPT_X_TLS_CRL_ALL	
๏ LDAP_OPT_X_TLS_DHFILE	
๏ LDAP_OPT_X_TLS_CRLFILE	
๏ LDAP_OPT_X_TLS_PROTOCOL_MIN	
๏ LDAP_OPT_X_TLS_PROTOCOL_SSL2	
๏ LDAP_OPT_X_TLS_PROTOCOL_SSL3	
๏ LDAP_OPT_X_TLS_PROTOCOL_TLS1_0	
๏ LDAP_OPT_X_TLS_PROTOCOL_TLS1_1	
๏ LDAP_OPT_X_TLS_PROTOCOL_TLS1_2	
๏ LDAP_OPT_X_TLS_PACKAGE	
๏ LDAP_OPT_X_KEEPALIVE_IDLE	
๏ LDAP_OPT_X_KEEPALIVE_PROBES	
๏ LDAP_OPT_X_KEEPALIVE_INTERVAL
BREAKING	BC
THESE	MIGHT	BREAK	STUFF
๏ Throw	on	passing	too	few	funcFon	arguments	
๏ Forbid	dynamic	calls	to	scope	introspecFon	funcFons	
๏ Invalid	class,	interface,	and	trait	names	
๏ void	
๏ iterable	
๏ Numerical	string	conversions	now	respect	scienFfic	notaFon	
๏ Fixes	to	mt_rand()	algorithm	
๏ rand()	aliased	to	mt_rand()	and	srand()	aliased	to	mt_srand()	
๏ Disallow	the	ASCII	delete	control	character	(0x7F)	in	idenFfiers	
๏ error_log	changes	with	syslog	error	values
THESE	MIGHT	BREAK	STUFF	(2)
๏ Do	not	call	destructors	on	incomplete	objects	
๏ call_user_func()	handling	of	reference	arguments	
๏ The	empty	index	operator	is	not	supported	for	strings	anymore	
๏ $str[]	=	$x	throws	a	fatal	error	
๏ Removed	ini	direcFves	
๏ session.entropy_file	
๏ session.entropy_length	
๏ session.hash_funcFon	
๏ session.hash_bits_per_character
DEPRECATED	FEATURES
THESE	ARE	NOW	DEPRECATED
๏ ext/mcrypt	
๏ Eval	opFon	for	mb_ereg_replace()	and	mb_eregi_replace()
CHANGED	FUNCTIONS
PHP	CORE
๏ getopt()	has	an	opFonal	third	parameter	that	exposes	the	index	of	the	next	
element	in	the	argument	vector	list	to	be	processed.	This	is	done	via	a	by-
ref	parameter.	
๏ getenv()	no	longer	requires	its	parameter.	If	the	parameter	is	omiTed,	then	
the	current	environment	variables	will	be	returned	as	an	associaFve	array.	
๏ get_headers()	now	has	an	addiFonal	parameter	to	enable	for	the	passing	of	
custom	stream	contexts.	
๏ long2ip()	now	also	accepts	an	integer	as	a	parameter.	
๏ output_reset_rewrite_vars()	no	longer	resets	session	URL	rewrite	variables.	
๏ parse_url()	is	now	more	restricFve	and	supports	RFC3986.	
๏ unpack()	now	accepts	an	opFonal	third	parameter	to	specify	the	offset	to	
begin	unpacking	from.
OTHER	CHANGED	FUNCTIONS
๏ File	System	
๏ tempnam()	now	emits	a	noFce	when	falling	back	to	the	system's	temp	
directory.	
๏ JSON	
๏ json_encode()	now	accepts	a	new	opFon,	
JSON_UNESCAPED_LINE_TERMINATORS,	to	disable	the	escaping	of	U+2028	
and	U+2029	characters	when	JSON_UNESCAPED_UNICODE	is	supplied.	
๏ MulTbyte	String	
๏ mb_ereg()	now	rejects	illegal	byte	sequences.	
๏ mb_ereg_replace()	now	rejects	illegal	byte	sequences.	
๏ PDO	
๏ PDO::lastInsertId()	for	PostgreSQL	will	now	trigger	an	error	when	nextval	
has	not	been	called	for	the	current	session	(the	postgres	connecFon).
POSTGRESQL
๏ pg_last_noFce()	now	accepts	an	opFonal	parameter	to	specify	an	
operaFon.	This	can	be	done	with	one	of	the	following	new	
constants:	PGSQL_NOTICE_LAST,	PGSQL_NOTICE_ALL,	or	
PGSQL_NOTICE_CLEAR.	
๏ pg_fetch_all()	now	accepts	an	opFonal	second	parameter	to	
specify	the	result	type	(similar	to	the	third	parameter	of	
pg_fetch_array()).	
๏ pg_select()	now	accepts	an	opFonal	fourth	parameter	to	specify	
the	result	type	(similar	to	the	third	parameter	of	pg_fetch_array()).
OTHER	CHANGES
OTHER	CHANGES
๏ NoFces	and	warnings	on	arithmeFc	with	invalid	strings		
๏ New	E_WARNING	and	E_NOTICE	errors	have	been	introduced	
when	invalid	strings	are	coerced	using	operators	expecFng	
numbers	
๏ E_NOTICE	is	emiTed	when	the	string	begins	with	a	numeric	
value	but	contains	trailing	non-numeric	characters	
๏ E_WARNING	is	emiTed	when	the	string	does	not	contain	a	
numeric	value	
๏ Warn	on	octal	escape	sequence	overflow	
๏ Inconsistency	fixes	to	$this	
๏ Session	ID	generaFon	without	hashing
AGENDA
WHAT	HAS	CHANGED	SINCE	PHP	5?
WHAT’S	NEW	IN	PHP	7?
OTHER	THINGS	YOU	NEED	TO	KNOW
MIGRATING	PHP	5	APPS	TO	PHP	7
CLOSING	REMARKS	&	QUESTIONS
OTHER	THINGS	THAT	CHANGED
๏ FuncFon	“set_excepFon_handler()”	is	no	longer	guaranteed	to	
receive	ExcepTon	objects	but	Throwable	objects	
๏ Error	reporFng	E_STRICT	noFces	severity	changes	as	some	have	
been	changed	and	will	not	trigger	an	error	
๏ The	deprecated	“set_socket_blocking()”	alias	has	been	removed	in	
favour	of	“stream_set_blocking()”	
๏ Switch	statements	cannot	have	mulFple	default	blocks	
๏ FuncFons	cannot	have	mulFple	parameters	with	the	same	name	
๏ PHP	funcFons	“func_get_arg()”	and	“func_get_args()”	now	return	
current	argument	values
PHP	7	PERFORMANCE
PERFORMANCE
WORDPRESS
Source:	Zend	PHP	7	Infograph
PERFORMANCE
MAGENTO
Source:	Zend	PHP	7	Infograph
PERFORMANCE
WORDPRESS
Source:	Zend	PHP	7	Infograph
PERFORMANCE
FRAMEWORKS
Source:	Zend	PHP	7	Infograph
PERFORMANCE
CRM
Source:	Zend	PHP	7	Infograph
PERFORMANCE
COMPARISON	TO	OTHER	LANGUAGES
Source:	Zend	PHP	7	Infograph
PERFORMANCE
YII	FRAMEWORK
Source:	caleblloyd.com
AGENDA
WHAT	HAS	CHANGED	SINCE	PHP	5?
WHAT’S	NEW	IN	PHP	7?
OTHER	THINGS	YOU	NEED	TO	KNOW
MIGRATING	PHP	5	APPS	TO	PHP	7
CLOSING	REMARKS	&	QUESTIONS
DOMAIN	MODELS
DOMAIN	MODELS
<?php
namespace DragonBephp7workshop;
class User
{
    /** @var string $name The Name of the User */
    protected $name;
    /** @var int $age The age of the User */
    protected $age;
    /**
     * User constructor.
     *
     * @param string $name The name of the User
     * @param int $age The age of the User
     */
    public function __construct($name = '', $age = 0)
    {
        $this->setName($name)
            ->setAge($age);
    }
    /**
     * Sets the name of the User
     *
     * @param string $name The name of the User
     * @return User
     */
    public function setName($name)
    {
        $this->name = (string) $name;
        return $this;
    }
    /**
     * Retrieve the name of the User
     *
     * @return string
     */
    public function getName()
    {
        return $this->name;
    }
    /**
     * Sets the age of the User
     *
     * @param int $age
     * @return User
     */
    public function setAge($age)
    {
        $this->age = (int) $age;
        return $this;
    }
    /**
     * Retrieve the age of the User
     * @return int
     */
    public function getAge()
    {
        return $this->age;
    }
}
DOMAIN	MODELS	(CONT.)
<?php
namespace DragonBephp7workshop;
class User
{
    /** @var string $name The Name of the User */
    protected $name;
    /** @var int $age The age of the User */
    protected $age;
    /**
     * User constructor.
     *
     * @param string $name The name of the User
     * @param int $age The age of the User
     * @throws TypeError
     */
    public function __construct(string $name = '', int $age = 0)
    {
        $this->setName($name)
            ->setAge($age);
    }
}
DOMAIN	MODELS	(CONT.)
    /**
     * Sets the name of the User
     *
     * @param string $name The name of the User
     * @return User
     */
    public function setName(string $name): User
    {
        $this->name = $name;
        return $this;
    }
    /**
     * Retrieve the name of the User
     *
     * @return string
     */
    public function getName(): string
    {
        return $this->name;
    }
    /**
     * Sets the age of the User
     *
     * @param int $age
     * @return User
     */
    public function setAge(int $age): User
    {
        $this->age = $age;
        return $this;
    }
    /**
     * Retrieve the age of the User
     * @return int
     */
    public function getAge(): int
    {
        return $this->age;
    }
DOMAIN	MODELS	(CONT.)
<?php
declare(strict_types=1);
require_once __DIR__ . '/User.php';
use DragonBephp7workshopUser;
$user = new User('michelangelo', '39');
var_dump($user);
MYSQL	EXTENSION
S/MYSQL_/MYSQLI_
๏ On	bash	you	could	grep -r mysql_ *	in	your	project’s	root	
directory	to	discover	files	sFll	using	old	mysql	elements	
๏ Use	your	IDE	and	search	for	“mysql_”	
๏ Most	of	the	Fme	you	can	just	replace	“mysql_”	with	“mysqli_”
INCOMPATIBLE	MYSQL_	FUNC.
๏ mysql_client_encoding()	 	
๏ mysql_list_dbs()	(use	SHOW	DATABASES	query)	
๏ mysql_db_name()	
๏ mysql_list_fields()	
๏ mysql_db_query()	
๏ mysql_list_processes()	(use	SHOW	PROCESSLIST	
query)	
๏ mysql_dbname()	
๏ mysql_list_tables()	(use	SHOW	TABLES	query)	
๏ mysql_field_flags()	
๏ mysql_listdbs()	(use	SHOW	DATABASES	query)	
๏ mysql_field_len()	
๏ mysql_lisWields()	
๏ mysql_field_name()	
๏ mysql_lisTables()	(use	SHOW	TABLES	query)	
๏ mysql_field_table()	
๏ mysql_numfields()	
๏ mysql_field_type()	
๏ mysql_numrows()	(use	mysqli_num_rows()	
instead)	
๏ mysql_fieldflags()	
๏ mysql_pconnect()	(append	p:	to	the	hostname	
passed	to	mysqli_connect())	
๏ mysql_fieldlen()	
๏ mysql_result()	
๏ mysql_fieldname()	
๏ mysql_selectdb()	(use	mysqli_select_db()	instead)	
๏ mysql_fieldtable()	
๏ mysql_table_name()	
๏ mysql_fieldtype()	
๏ mysql_tablename()	
๏ mysql_freeresult()	(use	mysqli_free_result()	
instead)	
๏ mysql_unbuffered_query()
USE	PDO!
PHP.NET/PDO
AGENDA
WHAT	HAS	CHANGED	SINCE	PHP	5?
WHAT’S	NEW	IN	PHP	7?
OTHER	THINGS	YOU	NEED	TO	KNOW
MIGRATING	PHP	5	APPS	TO	PHP	7
CLOSING	REMARKS	&	QUESTIONS
YOUR	1-STOP	SOURCE
PHP.NET/MANUAL/EN/MIGRATION70.PHP
RECOMMENDED	READING
IN2.SE/PHP7BOOK
PHP	CHEATSHEETS
PHPCHEATSHEETS.COM
NOW	READY	FOR	PHP	7
AND	MORE	COMING…
YOUR	PROJECTS…
TIME	TO	UPGRADE
in it2PROFESSIONAL PHP SERVICES
Thank you!
Slides at in2.se/hd-php7
training@in2it.be - www.in2it.be - T in2itvof - F in2itvof
PHPUnit
Getting Started
Advanced Testing
Zend Framework 2
Fundamentals
Advanced
Azure PHP
Quick time to market
Scale up and out
jQuery
Professional jQuery
PHP
PHP for beginners
Professional PHP
HTML & CSS
The Basics
Our training courses
29c51
If you enjoyed this talk, thanks.
If not, tell me how to make it better
Leave feedback and grab the slides
Getting hands dirty with php7

More Related Content

What's hot

SharePoint Saturday Ottawa- Automate your Deployments with TFS and Build Server
SharePoint Saturday Ottawa- Automate your Deployments with TFS and Build ServerSharePoint Saturday Ottawa- Automate your Deployments with TFS and Build Server
SharePoint Saturday Ottawa- Automate your Deployments with TFS and Build ServerVlad Catrinescu
 
Ember.js - Harnessing Convention Over Configuration
Ember.js - Harnessing Convention Over ConfigurationEmber.js - Harnessing Convention Over Configuration
Ember.js - Harnessing Convention Over ConfigurationTracy Lee
 
Mark Wall - F5 Agility 2017 - F5 Automation The Journey - PPT
Mark Wall - F5 Agility 2017 - F5 Automation The Journey - PPTMark Wall - F5 Agility 2017 - F5 Automation The Journey - PPT
Mark Wall - F5 Agility 2017 - F5 Automation The Journey - PPTMark Wall
 
Don't be a Drag to Refresh
Don't be a Drag to RefreshDon't be a Drag to Refresh
Don't be a Drag to RefreshThomas Bouldin
 
Building Chatbots
Building ChatbotsBuilding Chatbots
Building ChatbotsTessa Mero
 
See the time on your wrist - Apple Watch presentation
See the time on your wrist - Apple Watch presentationSee the time on your wrist - Apple Watch presentation
See the time on your wrist - Apple Watch presentationLammert Westerhoff
 
React For Vikings
React For VikingsReact For Vikings
React For VikingsFITC
 
Mark Wall - F5 Agility 2017 - F5 Automation The Journey - PDF
Mark Wall - F5 Agility 2017 - F5 Automation The Journey - PDFMark Wall - F5 Agility 2017 - F5 Automation The Journey - PDF
Mark Wall - F5 Agility 2017 - F5 Automation The Journey - PDFMark Wall
 
Salesforce Slack Demo Cactusforce 2022
Salesforce Slack Demo Cactusforce 2022Salesforce Slack Demo Cactusforce 2022
Salesforce Slack Demo Cactusforce 2022Daniel Peter
 
Super Power Your Agency Webinar
Super Power Your Agency WebinarSuper Power Your Agency Webinar
Super Power Your Agency WebinarJeff Pflueger
 
Combining CMS with eCommerce Thanks to APIs
Combining CMS with eCommerce Thanks to APIsCombining CMS with eCommerce Thanks to APIs
Combining CMS with eCommerce Thanks to APIsPaweł Jędrzejewski
 
What I learned teaching programming to 150 beginners
What I learned teaching programming to 150 beginnersWhat I learned teaching programming to 150 beginners
What I learned teaching programming to 150 beginnersEtiene Dalcol
 
Optimizing for Change (Henrik Joreteg)
Optimizing for Change (Henrik Joreteg)Optimizing for Change (Henrik Joreteg)
Optimizing for Change (Henrik Joreteg)Future Insights
 
Automating PhoneGap Build
Automating PhoneGap BuildAutomating PhoneGap Build
Automating PhoneGap BuildMatt Gifford
 
WordPress and Client Side Web Applications WCTO
WordPress and Client Side Web Applications WCTOWordPress and Client Side Web Applications WCTO
WordPress and Client Side Web Applications WCTORoy Sivan
 
Building with Watson - Interpreting Language Using the Natural Language Class...
Building with Watson - Interpreting Language Using the Natural Language Class...Building with Watson - Interpreting Language Using the Natural Language Class...
Building with Watson - Interpreting Language Using the Natural Language Class...IBM Watson
 

What's hot (20)

SharePoint Saturday Ottawa- Automate your Deployments with TFS and Build Server
SharePoint Saturday Ottawa- Automate your Deployments with TFS and Build ServerSharePoint Saturday Ottawa- Automate your Deployments with TFS and Build Server
SharePoint Saturday Ottawa- Automate your Deployments with TFS and Build Server
 
Ember.js - Harnessing Convention Over Configuration
Ember.js - Harnessing Convention Over ConfigurationEmber.js - Harnessing Convention Over Configuration
Ember.js - Harnessing Convention Over Configuration
 
Mark Wall - F5 Agility 2017 - F5 Automation The Journey - PPT
Mark Wall - F5 Agility 2017 - F5 Automation The Journey - PPTMark Wall - F5 Agility 2017 - F5 Automation The Journey - PPT
Mark Wall - F5 Agility 2017 - F5 Automation The Journey - PPT
 
SPS Warsaw 2017
SPS Warsaw 2017SPS Warsaw 2017
SPS Warsaw 2017
 
Don't be a Drag to Refresh
Don't be a Drag to RefreshDon't be a Drag to Refresh
Don't be a Drag to Refresh
 
Building Chatbots
Building ChatbotsBuilding Chatbots
Building Chatbots
 
Chatbots
ChatbotsChatbots
Chatbots
 
Rebuilding our Foundation
Rebuilding our FoundationRebuilding our Foundation
Rebuilding our Foundation
 
See the time on your wrist - Apple Watch presentation
See the time on your wrist - Apple Watch presentationSee the time on your wrist - Apple Watch presentation
See the time on your wrist - Apple Watch presentation
 
React For Vikings
React For VikingsReact For Vikings
React For Vikings
 
Mark Wall - F5 Agility 2017 - F5 Automation The Journey - PDF
Mark Wall - F5 Agility 2017 - F5 Automation The Journey - PDFMark Wall - F5 Agility 2017 - F5 Automation The Journey - PDF
Mark Wall - F5 Agility 2017 - F5 Automation The Journey - PDF
 
Salesforce Slack Demo Cactusforce 2022
Salesforce Slack Demo Cactusforce 2022Salesforce Slack Demo Cactusforce 2022
Salesforce Slack Demo Cactusforce 2022
 
Super Power Your Agency Webinar
Super Power Your Agency WebinarSuper Power Your Agency Webinar
Super Power Your Agency Webinar
 
Combining CMS with eCommerce Thanks to APIs
Combining CMS with eCommerce Thanks to APIsCombining CMS with eCommerce Thanks to APIs
Combining CMS with eCommerce Thanks to APIs
 
What I learned teaching programming to 150 beginners
What I learned teaching programming to 150 beginnersWhat I learned teaching programming to 150 beginners
What I learned teaching programming to 150 beginners
 
Optimizing for Change (Henrik Joreteg)
Optimizing for Change (Henrik Joreteg)Optimizing for Change (Henrik Joreteg)
Optimizing for Change (Henrik Joreteg)
 
Automating PhoneGap Build
Automating PhoneGap BuildAutomating PhoneGap Build
Automating PhoneGap Build
 
WTF is PWA?
WTF is PWA?WTF is PWA?
WTF is PWA?
 
WordPress and Client Side Web Applications WCTO
WordPress and Client Side Web Applications WCTOWordPress and Client Side Web Applications WCTO
WordPress and Client Side Web Applications WCTO
 
Building with Watson - Interpreting Language Using the Natural Language Class...
Building with Watson - Interpreting Language Using the Natural Language Class...Building with Watson - Interpreting Language Using the Natural Language Class...
Building with Watson - Interpreting Language Using the Natural Language Class...
 

Viewers also liked

Eight simple rules to writing secure PHP programs
Eight simple rules to writing secure PHP programsEight simple rules to writing secure PHP programs
Eight simple rules to writing secure PHP programsAleksandr Yampolskiy
 
Organizing Your PHP Projects (2010 ConFoo)
Organizing Your PHP Projects (2010 ConFoo)Organizing Your PHP Projects (2010 ConFoo)
Organizing Your PHP Projects (2010 ConFoo)Paul Jones
 
An Elephant of a Different Colour: Hack
An Elephant of a Different Colour: HackAn Elephant of a Different Colour: Hack
An Elephant of a Different Colour: HackVic Metcalfe
 
Namespaces and Autoloading
Namespaces and AutoloadingNamespaces and Autoloading
Namespaces and AutoloadingVic Metcalfe
 
Slim RedBeanPHP and Knockout
Slim RedBeanPHP and KnockoutSlim RedBeanPHP and Knockout
Slim RedBeanPHP and KnockoutVic Metcalfe
 

Viewers also liked (8)

Eight simple rules to writing secure PHP programs
Eight simple rules to writing secure PHP programsEight simple rules to writing secure PHP programs
Eight simple rules to writing secure PHP programs
 
New in php 7
New in php 7New in php 7
New in php 7
 
Organizing Your PHP Projects (2010 ConFoo)
Organizing Your PHP Projects (2010 ConFoo)Organizing Your PHP Projects (2010 ConFoo)
Organizing Your PHP Projects (2010 ConFoo)
 
An Elephant of a Different Colour: Hack
An Elephant of a Different Colour: HackAn Elephant of a Different Colour: Hack
An Elephant of a Different Colour: Hack
 
Namespaces and Autoloading
Namespaces and AutoloadingNamespaces and Autoloading
Namespaces and Autoloading
 
Slim RedBeanPHP and Knockout
Slim RedBeanPHP and KnockoutSlim RedBeanPHP and Knockout
Slim RedBeanPHP and Knockout
 
Zero to SOLID
Zero to SOLIDZero to SOLID
Zero to SOLID
 
The road to php 7.1
The road to php 7.1The road to php 7.1
The road to php 7.1
 

Similar to Getting hands dirty with php7

Enterprise PHP (php|works 2008)
Enterprise PHP (php|works 2008)Enterprise PHP (php|works 2008)
Enterprise PHP (php|works 2008)Ivo Jansch
 
Enterprise PHP Development - ZendCon 2008
Enterprise PHP Development - ZendCon 2008Enterprise PHP Development - ZendCon 2008
Enterprise PHP Development - ZendCon 2008Ivo Jansch
 
PHP Interview Questions and Answers | Edureka
PHP Interview Questions and Answers | EdurekaPHP Interview Questions and Answers | Edureka
PHP Interview Questions and Answers | EdurekaEdureka!
 
PHP 4? OMG! A small vademecum for obsolete software migration.
PHP 4? OMG! A small vademecum for obsolete software migration.PHP 4? OMG! A small vademecum for obsolete software migration.
PHP 4? OMG! A small vademecum for obsolete software migration.Francesco Fullone
 
How composer saved PHP
How composer saved PHPHow composer saved PHP
How composer saved PHPRyan Kilfedder
 
The why and how of moving to php 8
The why and how of moving to php 8The why and how of moving to php 8
The why and how of moving to php 8Wim Godden
 
Phpworks enterprise-php-1227605806710884-9
Phpworks enterprise-php-1227605806710884-9Phpworks enterprise-php-1227605806710884-9
Phpworks enterprise-php-1227605806710884-9PrinceGuru MS
 
State Of PHP - Zeev Suraski
State Of PHP - Zeev SuraskiState Of PHP - Zeev Suraski
State Of PHP - Zeev Suraskidpc
 
Unleash your Symfony projects with eZ Platform
Unleash your Symfony projects with eZ PlatformUnleash your Symfony projects with eZ Platform
Unleash your Symfony projects with eZ PlatformSébastien Morel
 
Php through the eyes of a hoster confoo
Php through the eyes of a hoster confooPhp through the eyes of a hoster confoo
Php through the eyes of a hoster confooCombell NV
 
2013 - Dustin whittle - Escalando PHP en la vida real
2013 - Dustin whittle - Escalando PHP en la vida real2013 - Dustin whittle - Escalando PHP en la vida real
2013 - Dustin whittle - Escalando PHP en la vida realPHP Conference Argentina
 
Advanced PHP: Design Patterns - Dennis-Jan Broerse
Advanced PHP: Design Patterns - Dennis-Jan BroerseAdvanced PHP: Design Patterns - Dennis-Jan Broerse
Advanced PHP: Design Patterns - Dennis-Jan Broersedpc
 
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, 13DanWooster1
 

Similar to Getting hands dirty with php7 (20)

Enterprise PHP (php|works 2008)
Enterprise PHP (php|works 2008)Enterprise PHP (php|works 2008)
Enterprise PHP (php|works 2008)
 
Enterprise PHP Development - ZendCon 2008
Enterprise PHP Development - ZendCon 2008Enterprise PHP Development - ZendCon 2008
Enterprise PHP Development - ZendCon 2008
 
PHP Interview Questions and Answers | Edureka
PHP Interview Questions and Answers | EdurekaPHP Interview Questions and Answers | Edureka
PHP Interview Questions and Answers | Edureka
 
Php myths
Php mythsPhp myths
Php myths
 
Php OOP interview questions
Php OOP interview questionsPhp OOP interview questions
Php OOP interview questions
 
PHP 4? OMG! A small vademecum for obsolete software migration.
PHP 4? OMG! A small vademecum for obsolete software migration.PHP 4? OMG! A small vademecum for obsolete software migration.
PHP 4? OMG! A small vademecum for obsolete software migration.
 
How composer saved PHP
How composer saved PHPHow composer saved PHP
How composer saved PHP
 
Php7
Php7Php7
Php7
 
The why and how of moving to php 8
The why and how of moving to php 8The why and how of moving to php 8
The why and how of moving to php 8
 
Phpworks enterprise-php-1227605806710884-9
Phpworks enterprise-php-1227605806710884-9Phpworks enterprise-php-1227605806710884-9
Phpworks enterprise-php-1227605806710884-9
 
State Of PHP - Zeev Suraski
State Of PHP - Zeev SuraskiState Of PHP - Zeev Suraski
State Of PHP - Zeev Suraski
 
Unleash your Symfony projects with eZ Platform
Unleash your Symfony projects with eZ PlatformUnleash your Symfony projects with eZ Platform
Unleash your Symfony projects with eZ Platform
 
PHP Conference - Phalcon hands-on
PHP Conference - Phalcon hands-onPHP Conference - Phalcon hands-on
PHP Conference - Phalcon hands-on
 
Php through the eyes of a hoster confoo
Php through the eyes of a hoster confooPhp through the eyes of a hoster confoo
Php through the eyes of a hoster confoo
 
2013 - Dustin whittle - Escalando PHP en la vida real
2013 - Dustin whittle - Escalando PHP en la vida real2013 - Dustin whittle - Escalando PHP en la vida real
2013 - Dustin whittle - Escalando PHP en la vida real
 
Laravel level 0 (introduction)
Laravel level 0 (introduction)Laravel level 0 (introduction)
Laravel level 0 (introduction)
 
Symfony 2.0 on PHP 5.3
Symfony 2.0 on PHP 5.3Symfony 2.0 on PHP 5.3
Symfony 2.0 on PHP 5.3
 
Advanced PHP: Design Patterns - Dennis-Jan Broerse
Advanced PHP: Design Patterns - Dennis-Jan BroerseAdvanced PHP: Design Patterns - Dennis-Jan Broerse
Advanced PHP: Design Patterns - Dennis-Jan Broerse
 
Migrating to PHP 7
Migrating to PHP 7Migrating to PHP 7
Migrating to PHP 7
 
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
 

More from Michelangelo van Dam

GDPR Art. 25 - Privacy by design and default
GDPR Art. 25 - Privacy by design and defaultGDPR Art. 25 - Privacy by design and default
GDPR Art. 25 - Privacy by design and defaultMichelangelo van Dam
 
Moving from app services to azure functions
Moving from app services to azure functionsMoving from app services to azure functions
Moving from app services to azure functionsMichelangelo van Dam
 
General Data Protection Regulation, a developer's story
General Data Protection Regulation, a developer's storyGeneral Data Protection Regulation, a developer's story
General Data Protection Regulation, a developer's storyMichelangelo van Dam
 
Leveraging a distributed architecture to your advantage
Leveraging a distributed architecture to your advantageLeveraging a distributed architecture to your advantage
Leveraging a distributed architecture to your advantageMichelangelo van Dam
 
Deploy to azure in less then 15 minutes
Deploy to azure in less then 15 minutesDeploy to azure in less then 15 minutes
Deploy to azure in less then 15 minutesMichelangelo van Dam
 
Azure and OSS, a match made in heaven
Azure and OSS, a match made in heavenAzure and OSS, a match made in heaven
Azure and OSS, a match made in heavenMichelangelo van Dam
 
Zf2 how arrays will save your project
Zf2   how arrays will save your projectZf2   how arrays will save your project
Zf2 how arrays will save your projectMichelangelo van Dam
 
PHPUnit Episode iv.iii: Return of the tests
PHPUnit Episode iv.iii: Return of the testsPHPUnit Episode iv.iii: Return of the tests
PHPUnit Episode iv.iii: Return of the testsMichelangelo van Dam
 
Easily extend your existing php app with an api
Easily extend your existing php app with an apiEasily extend your existing php app with an api
Easily extend your existing php app with an apiMichelangelo van Dam
 
90K Reasons Security is a Must - PHPWorld 2014
90K Reasons Security is a Must - PHPWorld 201490K Reasons Security is a Must - PHPWorld 2014
90K Reasons Security is a Must - PHPWorld 2014Michelangelo van Dam
 

More from Michelangelo van Dam (20)

GDPR Art. 25 - Privacy by design and default
GDPR Art. 25 - Privacy by design and defaultGDPR Art. 25 - Privacy by design and default
GDPR Art. 25 - Privacy by design and default
 
Moving from app services to azure functions
Moving from app services to azure functionsMoving from app services to azure functions
Moving from app services to azure functions
 
Privacy by design
Privacy by designPrivacy by design
Privacy by design
 
DevOps or DevSecOps
DevOps or DevSecOpsDevOps or DevSecOps
DevOps or DevSecOps
 
Privacy by design
Privacy by designPrivacy by design
Privacy by design
 
Continuous deployment 2.0
Continuous deployment 2.0Continuous deployment 2.0
Continuous deployment 2.0
 
Let your tests drive your code
Let your tests drive your codeLet your tests drive your code
Let your tests drive your code
 
General Data Protection Regulation, a developer's story
General Data Protection Regulation, a developer's storyGeneral Data Protection Regulation, a developer's story
General Data Protection Regulation, a developer's story
 
Leveraging a distributed architecture to your advantage
Leveraging a distributed architecture to your advantageLeveraging a distributed architecture to your advantage
Leveraging a distributed architecture to your advantage
 
Deploy to azure in less then 15 minutes
Deploy to azure in less then 15 minutesDeploy to azure in less then 15 minutes
Deploy to azure in less then 15 minutes
 
Azure and OSS, a match made in heaven
Azure and OSS, a match made in heavenAzure and OSS, a match made in heaven
Azure and OSS, a match made in heaven
 
Zf2 how arrays will save your project
Zf2   how arrays will save your projectZf2   how arrays will save your project
Zf2 how arrays will save your project
 
Create, test, secure, repeat
Create, test, secure, repeatCreate, test, secure, repeat
Create, test, secure, repeat
 
The Continuous PHP Pipeline
The Continuous PHP PipelineThe Continuous PHP Pipeline
The Continuous PHP Pipeline
 
PHPUnit Episode iv.iii: Return of the tests
PHPUnit Episode iv.iii: Return of the testsPHPUnit Episode iv.iii: Return of the tests
PHPUnit Episode iv.iii: Return of the tests
 
Easily extend your existing php app with an api
Easily extend your existing php app with an apiEasily extend your existing php app with an api
Easily extend your existing php app with an api
 
Your code are my tests
Your code are my testsYour code are my tests
Your code are my tests
 
200K+ reasons security is a must
200K+ reasons security is a must200K+ reasons security is a must
200K+ reasons security is a must
 
QA for PHP projects
QA for PHP projectsQA for PHP projects
QA for PHP projects
 
90K Reasons Security is a Must - PHPWorld 2014
90K Reasons Security is a Must - PHPWorld 201490K Reasons Security is a Must - PHPWorld 2014
90K Reasons Security is a Must - PHPWorld 2014
 

Recently uploaded

Gravity concentration_MI20612MI_________
Gravity concentration_MI20612MI_________Gravity concentration_MI20612MI_________
Gravity concentration_MI20612MI_________Romil Mishra
 
Module-1-(Building Acoustics) Noise Control (Unit-3). pdf
Module-1-(Building Acoustics) Noise Control (Unit-3). pdfModule-1-(Building Acoustics) Noise Control (Unit-3). pdf
Module-1-(Building Acoustics) Noise Control (Unit-3). pdfManish Kumar
 
Forming section troubleshooting checklist for improving wire life (1).ppt
Forming section troubleshooting checklist for improving wire life (1).pptForming section troubleshooting checklist for improving wire life (1).ppt
Forming section troubleshooting checklist for improving wire life (1).pptNoman khan
 
SOFTWARE ESTIMATION COCOMO AND FP CALCULATION
SOFTWARE ESTIMATION COCOMO AND FP CALCULATIONSOFTWARE ESTIMATION COCOMO AND FP CALCULATION
SOFTWARE ESTIMATION COCOMO AND FP CALCULATIONSneha Padhiar
 
Research Methodology for Engineering pdf
Research Methodology for Engineering pdfResearch Methodology for Engineering pdf
Research Methodology for Engineering pdfCaalaaAbdulkerim
 
ROBOETHICS-CCS345 ETHICS AND ARTIFICIAL INTELLIGENCE.ppt
ROBOETHICS-CCS345 ETHICS AND ARTIFICIAL INTELLIGENCE.pptROBOETHICS-CCS345 ETHICS AND ARTIFICIAL INTELLIGENCE.ppt
ROBOETHICS-CCS345 ETHICS AND ARTIFICIAL INTELLIGENCE.pptJohnWilliam111370
 
CME 397 - SURFACE ENGINEERING - UNIT 1 FULL NOTES
CME 397 - SURFACE ENGINEERING - UNIT 1 FULL NOTESCME 397 - SURFACE ENGINEERING - UNIT 1 FULL NOTES
CME 397 - SURFACE ENGINEERING - UNIT 1 FULL NOTESkarthi keyan
 
Novel 3D-Printed Soft Linear and Bending Actuators
Novel 3D-Printed Soft Linear and Bending ActuatorsNovel 3D-Printed Soft Linear and Bending Actuators
Novel 3D-Printed Soft Linear and Bending ActuatorsResearcher Researcher
 
Artificial Intelligence in Power System overview
Artificial Intelligence in Power System overviewArtificial Intelligence in Power System overview
Artificial Intelligence in Power System overviewsandhya757531
 
US Department of Education FAFSA Week of Action
US Department of Education FAFSA Week of ActionUS Department of Education FAFSA Week of Action
US Department of Education FAFSA Week of ActionMebane Rash
 
Prach: A Feature-Rich Platform Empowering the Autism Community
Prach: A Feature-Rich Platform Empowering the Autism CommunityPrach: A Feature-Rich Platform Empowering the Autism Community
Prach: A Feature-Rich Platform Empowering the Autism Communityprachaibot
 
TEST CASE GENERATION GENERATION BLOCK BOX APPROACH
TEST CASE GENERATION GENERATION BLOCK BOX APPROACHTEST CASE GENERATION GENERATION BLOCK BOX APPROACH
TEST CASE GENERATION GENERATION BLOCK BOX APPROACHSneha Padhiar
 
Robotics Group 10 (Control Schemes) cse.pdf
Robotics Group 10  (Control Schemes) cse.pdfRobotics Group 10  (Control Schemes) cse.pdf
Robotics Group 10 (Control Schemes) cse.pdfsahilsajad201
 
Python Programming for basic beginners.pptx
Python Programming for basic beginners.pptxPython Programming for basic beginners.pptx
Python Programming for basic beginners.pptxmohitesoham12
 
Theory of Machine Notes / Lecture Material .pdf
Theory of Machine Notes / Lecture Material .pdfTheory of Machine Notes / Lecture Material .pdf
Theory of Machine Notes / Lecture Material .pdfShreyas Pandit
 
FUNCTIONAL AND NON FUNCTIONAL REQUIREMENT
FUNCTIONAL AND NON FUNCTIONAL REQUIREMENTFUNCTIONAL AND NON FUNCTIONAL REQUIREMENT
FUNCTIONAL AND NON FUNCTIONAL REQUIREMENTSneha Padhiar
 
KCD Costa Rica 2024 - Nephio para parvulitos
KCD Costa Rica 2024 - Nephio para parvulitosKCD Costa Rica 2024 - Nephio para parvulitos
KCD Costa Rica 2024 - Nephio para parvulitosVictor Morales
 
Guardians of E-Commerce: Harnessing NLP and Machine Learning Approaches for A...
Guardians of E-Commerce: Harnessing NLP and Machine Learning Approaches for A...Guardians of E-Commerce: Harnessing NLP and Machine Learning Approaches for A...
Guardians of E-Commerce: Harnessing NLP and Machine Learning Approaches for A...IJAEMSJORNAL
 

Recently uploaded (20)

Gravity concentration_MI20612MI_________
Gravity concentration_MI20612MI_________Gravity concentration_MI20612MI_________
Gravity concentration_MI20612MI_________
 
Module-1-(Building Acoustics) Noise Control (Unit-3). pdf
Module-1-(Building Acoustics) Noise Control (Unit-3). pdfModule-1-(Building Acoustics) Noise Control (Unit-3). pdf
Module-1-(Building Acoustics) Noise Control (Unit-3). pdf
 
Forming section troubleshooting checklist for improving wire life (1).ppt
Forming section troubleshooting checklist for improving wire life (1).pptForming section troubleshooting checklist for improving wire life (1).ppt
Forming section troubleshooting checklist for improving wire life (1).ppt
 
ASME-B31.4-2019-estandar para diseño de ductos
ASME-B31.4-2019-estandar para diseño de ductosASME-B31.4-2019-estandar para diseño de ductos
ASME-B31.4-2019-estandar para diseño de ductos
 
SOFTWARE ESTIMATION COCOMO AND FP CALCULATION
SOFTWARE ESTIMATION COCOMO AND FP CALCULATIONSOFTWARE ESTIMATION COCOMO AND FP CALCULATION
SOFTWARE ESTIMATION COCOMO AND FP CALCULATION
 
Research Methodology for Engineering pdf
Research Methodology for Engineering pdfResearch Methodology for Engineering pdf
Research Methodology for Engineering pdf
 
ROBOETHICS-CCS345 ETHICS AND ARTIFICIAL INTELLIGENCE.ppt
ROBOETHICS-CCS345 ETHICS AND ARTIFICIAL INTELLIGENCE.pptROBOETHICS-CCS345 ETHICS AND ARTIFICIAL INTELLIGENCE.ppt
ROBOETHICS-CCS345 ETHICS AND ARTIFICIAL INTELLIGENCE.ppt
 
CME 397 - SURFACE ENGINEERING - UNIT 1 FULL NOTES
CME 397 - SURFACE ENGINEERING - UNIT 1 FULL NOTESCME 397 - SURFACE ENGINEERING - UNIT 1 FULL NOTES
CME 397 - SURFACE ENGINEERING - UNIT 1 FULL NOTES
 
Novel 3D-Printed Soft Linear and Bending Actuators
Novel 3D-Printed Soft Linear and Bending ActuatorsNovel 3D-Printed Soft Linear and Bending Actuators
Novel 3D-Printed Soft Linear and Bending Actuators
 
Artificial Intelligence in Power System overview
Artificial Intelligence in Power System overviewArtificial Intelligence in Power System overview
Artificial Intelligence in Power System overview
 
US Department of Education FAFSA Week of Action
US Department of Education FAFSA Week of ActionUS Department of Education FAFSA Week of Action
US Department of Education FAFSA Week of Action
 
Prach: A Feature-Rich Platform Empowering the Autism Community
Prach: A Feature-Rich Platform Empowering the Autism CommunityPrach: A Feature-Rich Platform Empowering the Autism Community
Prach: A Feature-Rich Platform Empowering the Autism Community
 
TEST CASE GENERATION GENERATION BLOCK BOX APPROACH
TEST CASE GENERATION GENERATION BLOCK BOX APPROACHTEST CASE GENERATION GENERATION BLOCK BOX APPROACH
TEST CASE GENERATION GENERATION BLOCK BOX APPROACH
 
Versatile Engineering Construction Firms
Versatile Engineering Construction FirmsVersatile Engineering Construction Firms
Versatile Engineering Construction Firms
 
Robotics Group 10 (Control Schemes) cse.pdf
Robotics Group 10  (Control Schemes) cse.pdfRobotics Group 10  (Control Schemes) cse.pdf
Robotics Group 10 (Control Schemes) cse.pdf
 
Python Programming for basic beginners.pptx
Python Programming for basic beginners.pptxPython Programming for basic beginners.pptx
Python Programming for basic beginners.pptx
 
Theory of Machine Notes / Lecture Material .pdf
Theory of Machine Notes / Lecture Material .pdfTheory of Machine Notes / Lecture Material .pdf
Theory of Machine Notes / Lecture Material .pdf
 
FUNCTIONAL AND NON FUNCTIONAL REQUIREMENT
FUNCTIONAL AND NON FUNCTIONAL REQUIREMENTFUNCTIONAL AND NON FUNCTIONAL REQUIREMENT
FUNCTIONAL AND NON FUNCTIONAL REQUIREMENT
 
KCD Costa Rica 2024 - Nephio para parvulitos
KCD Costa Rica 2024 - Nephio para parvulitosKCD Costa Rica 2024 - Nephio para parvulitos
KCD Costa Rica 2024 - Nephio para parvulitos
 
Guardians of E-Commerce: Harnessing NLP and Machine Learning Approaches for A...
Guardians of E-Commerce: Harnessing NLP and Machine Learning Approaches for A...Guardians of E-Commerce: Harnessing NLP and Machine Learning Approaches for A...
Guardians of E-Commerce: Harnessing NLP and Machine Learning Approaches for A...
 

Getting hands dirty with php7