By Thomas Dutrion / @tdutrion - 02/02/2016
Aberdeen (1st Wednesday)
Edinburgh (2nd Tuesday)
Glasgow (3rd Tuesday)
Dundee (4rd Thursday)
<!--include /text/header.html-->
<!--getenv HTTP_USER_AGENT-->
<!--ifsubstr $exec_result Mozilla-->
Hey, you are using Netscape!<p>
<!--endif-->
<!--sql database select * from table where user='$username'-->
<!--ifless $numentries 1-->
Sorry, that record does not exist<p>
<!--endif exit-->
Welcome <!--$user-->!<p>
You have <!--$index:0--> credits left in your account.<p>
<!--include /text/footer.html-->
Unfortunately similar to what most people learn in universities and schools...
<?php
class Car implement Vehicle
{
private $colour;
public function hasFourWheels()
{
return true;
}
}
$car = new Car();
var_dump($car->hasFourWheels());
<?php
function add($item1, $item2) {
return $item1 + $item2;
}
var_dump(add(1, 1));
// int(2)
var_dump(add(1, 'test'));
// int(1)
var_dump(add(1, array('test')));
// Fatal error: Uncaught Error: Unsupported operand types
<?php
class Car {}
function functionUsingCar(Car $car) {}
$car1 = new Car();
functionUsingCar($car1);
$car2 = new stdClass();
functionUsingCar($car2);
// Catchable fatal error: Argument 1 passed to functionUsingCar()
// must be an instance of Car, stdClass given
<?php
try {
throw new Exception('an error occurred');
} catch (Exception $e) {
echo $e->getMessage();
// an error occurred
}
try {
trigger_error('an error occurred');
} catch (Exception $e) {
echo $e->getMessage();
}
// Notice: an error occurred in /in/MoXC0 on line 10
PHP tries to convert the value to the expected type before validating the argument (default behaviour).
<?php
// Coercive mode
function sumOfInts(int ...$ints)
{
return array_sum($ints);
}
var_dump(sumOfInts(2, '3', 4.1));
// result = 9 (2 + 3 + 4, 4.1 being converted to int)
Has to be declared in each file.
Also impacts return types, PHP build-in functions and extensions.
<?php
declare (strict_types=1)
// Strict mode
function sumOfInts(int ...$ints)
{
return array_sum($ints);
}
var_dump(sumOfInts(2, 3, 4));
//int(9)
var_dump(sumOfInts(2, '3', 4.1));
// Fatal error: Uncaught TypeError: Argument 2 passed to sumOfInts()
// must be of the type integer, string given
// Next TypeError: Argument 3 passed to sumOfInts() must be of the
// type integer, float given
<?php
function add($a, $b) : float {
return $a + $b;
}
var_dump(1, 2);
// float(3)
<?php
declare (strict_types=1);
function add($a, $b) : float
{
return $a + $b;
}
var_dump(1, 2);
// float(3)
var_dump(1.1, 2);
// Fatal error: Uncaught TypeError: Return value of add() must
// be of the type integer, float returned
HHVM is an open-source virtual machine designed for executing programs written in Hack and PHP.
Problem: how can you be sure you can run PHP programs?
Solution: Facebook and some PHP core contributors wrote a language specification based on PHP 5.6.
Using the community effort to write the same piece multiple times.
Writing recommandations for interoperability.
Currently:
Zend \ Log \ LoggerInterface | PSR 3 |
Zend \ Loader \ AutoloaderFactory | PSR 4 autoloading |
Zend \ Cache \ Storage \ StorageInterface | PSR 6 |
Zend \ MVC \ Controller \ AbstractActionController | PSR 7 Middleware (callable, invokable class) |
Routing |
|
DI Containers |
|
Templating |
|
composer.json
requirementscomposer.lock
vendor/autoload.php