12. Session Status
<?php
function status() {
$status = session_status();
if($status == PHP_SESSION_DISABLED) {
echo "Session is Disabled";
} else if($status == PHP_SESSION_NONE ) {
echo "Session Enabled but No Session values Created";
} else {
echo "Session Enabled and Session values Created";
}
}
status();
//return Session Enabled but No Session values Created
session_start();
status();
//return Session Enabled and Session values Created
13. Interfaz de Handler de Sessiones Nativa
S
N TE
<?php
A $obj = new MySessionHandler;
session_set_save_handler(
array($obj, "open"),
array($obj, "close"),
array($obj, "read"),
array($obj, "write"),
array($obj, "destroy"),
array($obj, "gc")
);
14. Interfaz de Handler de Sessiones Nativa
R A
O MySessionHandler
H class
<?php
A implements SessionHandlerInterface
{
public function open($savePath, $sessionName) {}
public function close() {}
public function read($id) {}
public function write($id, $data) {}
public function destroy($id) {}
public function gc($maxlifetime) {}
}
$handler = new MySessionHandler();
session_set_save_handler($handler, true);
session_start();
18. Acceso a metodos en la instanciación
<?php
class Test
{
public function foo(){ return 'foo';}
}
echo (new Test())->foo();
//return foo
19. Callable Type Hint
<?php
class Test {
public function foo() {return 'foo';}
static public function bar() {return 'bar';}
public function __invoke(){return 'invoke';}
}
function run(callable $func) {
echo $func();
}
$o = new Test;
$var = 'excepcion';
run(['Test', 'bar']); //return bar
run([$o, 'foo']); //return foo
run($o); //return invoke
run($var); //Catchable fatal error: Argument
//1 passed to run() must be callable
20. Closures & $this
<?php
class Test {
protected $name = 'Mostofreddy';
public function getName() {
$callback = function() {return $this->name;};
return $callback;
}
}
$o = new Test;
$func = $o->getName();
echo $func(); //return Mostofreddy
21. Closure::bindTo
<?php
class A {
function __construct($val) {$this->val = $val;}
function getClosure() {
return function() { return $this->val; };
}
}
$ob1 = new A(1);
$ob2 = new A(2);
$func = $ob1->getClosure();
echo $func(); //return 1
$func = $func->bindTo($ob2);
echo $func(); //return 2
22. Class::{expr}() syntax
<?php
class Test {
static public function foo(){ return "method foo";}
static public function bar(){ return "method bar";}
}
$method = true;
echo Test::{($method)?'foo':'bar'}();
//return method foo
26. ~/www$ php -S localhost:8080
PHP 5.4.0 Development Server started at Mon Apr
2 11:37:48 2012
Listening on localhost:8080
Document root is /var/www
Press Ctrl-C to quit.
TIP: para usarlo desde una virtual hay
que poner 0.0.0.0
27. ~/www$ vim server.sh
#! /bin/bash
DOCROOT="/var/www"
HOST=0.0.0.0
PORT=80
ROUTER="/var/www/router.php"
PHP=$(which php)
if [ $? != 0 ] ; then
echo "Unable to find PHP"
exit 1
fi
$PHP -S $HOST:$PORT -t $DOCROOT $ROUTER
29. Ejemplo simple
<?php
trait Log {
public function addLog($m) {echo 'LOG: '.$m;}
}
class Test {
use Log;
public function foo() {
$this->addLog('foo');
}
}
$obj = new Test;
$obj->foo();
//return LOG: foo
30. Multiple Traits
<?php
trait Log {
public function addLog($m) {echo 'LOG: '.$m;}
}
trait Mensaje {
public function holaMundo() {return "Hola Mundo!";}
}
class Test {
use Log, Mensaje;
public function foo() {
$this->addLog($this->holaMundo());
}
}
$obj = new Test;
$obj->foo();
//return LOG: Hola Mundo!
31. Traits: Composicion
<?php
trait File {
public function put($m) {error_log($m, 3, '/tmp/log');}
}
trait Log {
use File;
public function addLog($m) {$this->put('LOG: '.$m);}
}
class Test {
use Log;
public function foo() { $this->addLog('test');}
}
$obj = new Test;
$obj->foo();
//return LOG: test
32. Traits: Herencia
<?php
trait Hello {
public function foo () {return "traits";}
public function foo_1() {
return $this->foo()." - ".parent::foo();
}
}
class Base {
public function foo() {return 'base';}
}
class Test extends Base {
use Hello;
public function foo() {return 'Test';}
}
$o = new Test;
echo $o->foo(); //return Test
echo $o->foo_1(); //return Test - base
33. Traits: Resolviendo conflictos
<?php
trait Game {
public function play() {return "Play Game";}
}
trait Music {
public function play() {return "Play Music";}
}
class Player {
use Game, Music;
}
$o = new Player;
echo $o->play();
34. Traits: Resolviendo conflictos
<?php
trait Game {
public function play() {return "Play Game";}
}
trait Music {
public function play() {return "Play Music";}
}
class Player {
use Game, Music;
}
$o = new Player; PHP no resuelve el
echo $o->play(); conflicto automáticamente
PHP Fatal error: Trait method play has not been applied,
because there are collisions with other trait methods
on Player in /var/www/test/test_traits.php on line 10
35. Traits: Resolviendo conflictos - insteadof
trait Game {
public function play() {return "Play Game";}
}
trait Music {
public function play() {return "Play Music";}
}
class Player {
use Game, Music {
Music::play insteadof Game;
}
}
$o = new Player;
echo $o->play();
//return Play Music
36. Traits: Resolviendo conflictos - rename
<?php
trait Game {
public function play() {return "Play Game";}
}
trait Music {
public function play() {return "Play Music";}
}
class Player {
use Game, Music {
Game::play as gamePlay;
Music::play insteadof Game;
}
}
$o = new Player;
echo $o->play(); //return Play Music
echo $o->gamePlay(); //return Play Game
37. Traits: Atributos
<?php
trait Usuario {
protected $nombre;
public function getName(){ return $this->nombre;}
}
class Empleado {
use Usuario;
public function setName($nombre) {
$this->nombre = $nombre;
}
}
$o = new Empleado;
$o->setName('Federico');
echo $o->getName();
//return Federico
38.
39. ini options
Safe mode and all related options
magic_quotes_gpc
magic_quotes_runtime
magic_quotes_sybase
register_globals
register_long_arrays
define_syslog_variables
y2k_compliance