2. PHP 7 huh ? Where did PHP 6 went ???
• PHP 6 is failure
• to prevent confusion
• to let sleeping dogs lie
3. What’re the changes?
• Use JSOND instead of JSON
• Deprecation of PHP 4-Style Constructors
• No more `<?=` and <script language=“php">
• Removal of Dead Server APIs
• Removal of Hex Support in Numerical Strings
• Removal of Deprecated Functionality
• Deprecation of Salt Option for password_hash()
4. What’re the Features?
• Double Arrow Operators
• Null Coalesce Operator
• Scalar Type Declarations
• Anonymous Classes
• Closure call() Method
• Group use Declarations
• Support for Array Constants in define()
5. Double Arrow Operator
- CCO (Combined Comparison Operator)
- combination of >,< and =
- 1 <=> 2 <=> 3 is not allowed
- Objects are not comparable
// compares strings lexically
var_dump('PHP' <=> 'Node'); // int(1)
// compares numbers by size
var_dump(123 <=> 456); // int(-1)
// compares corresponding array elements with one-another
var_dump(['a', 'b'] <=> ['a', 'b']); // int(0)
6. Null Coalesce Operator
- used widely in Swift
- very useful for shorthand
- alternative to ‘||’ in javascript
- less isset()
$route = isset($_GET['route']) ? $_GET['route'] : 'index';
$route = $_GET['route'] ?? 'index';
PHP 7
Before PHP 7
7. Scalar Type Declarations
Corecive Mode
function sumOfInts(int …$ints) { return array_sum($ints); }
var_dump(sumOfInts(2, '3', 4.1)); // int(9)
declare(strict_types=1);
function multiply(float $x, float $y) { return $x * $y; }
function add(int $x, int $y) { return $x + $y; }
var_dump(multiply(2, 3.5)); // float(7)
var_dump(add('2', 3));
// Fatal error: Uncaught TypeError: Argument 1 passed to add() must be of the type
integer, string given...
Strict Mode
9. $util->setLogger(new class {
public function log($msg)
{
echo $msg;
}
});
class Logger
{
public function log($msg)
{
echo $msg;
}
}
$util->setLogger(new Logger());
Anonymous Classes
Before PHP 7
PHP 7
10. use somenamespace{ClassA, ClassB, ClassC as C};
use function somenamespace{fn_a, fn_b, fn_c};
use const somenamespace{ConstA, ConstB, ConstC};
use somenamespaceClassA;
use somenamespaceClassB;
use somenamespaceClassC as C;
use function somenamespacefn_a;
use function somenamespacefn_b;
use function somenamespacefn_c;
use const somenamespaceConstA;
use const somenamespaceConstB;
use const somenamespaceConstC;
PHP 7
Before PHP 7
Group `use` Declarations