SlideShare a Scribd company logo
1 of 42
PHP 5.4
Federico Lozada Mosto
mostofreddy@gmail.com
@mostofreddy
http://www.mostofreddy.com.ar
PHP 5.4
Rocks!
40 %
más rápido
empty_loop             0.369          empty_loop          0.320          empty_loop          0.196
func()             1.318 0.948        func()          0.748 0.428        func()          0.654 0.458
undef_func()           1.635 1.265    undef_func()        0.760 0.440    undef_func()        0.599 0.403
int_func()          1.068 0.698       int_func()       0.703 0.384       int_func()       0.682 0.486
$x = self::$x        0.878 0.509      $x = self::$x     0.685 0.366      $x = self::$x     0.408 0.212
self::$x = 0         0.818 0.448      self::$x = 0      0.764 0.445      self::$x = 0      0.487 0.291
isset(self::$x) 0.843 0.474           isset(self::$x) 0.639 0.319        isset(self::$x) 0.484 0.288
empty(self::$x) 0.879 0.509           empty(self::$x) 0.690 0.370        empty(self::$x) 0.379 0.184
$x = Foo::$x           1.107 0.737    $x = Foo::$x        0.987 0.667    $x = Foo::$x        0.371 0.176
Foo::$x = 0           1.054 0.685     Foo::$x = 0        1.084 0.765     Foo::$x = 0        0.351 0.155
isset(Foo::$x) 1.041 0.672            isset(Foo::$x) 0.928 0.608         isset(Foo::$x) 0.322 0.126
empty(Foo::$x) 1.051 0.682            empty(Foo::$x) 0.970 0.651         empty(Foo::$x) 0.346 0.150
self::f()         1.412 1.043         self::f()      1.085 0.765         self::f()      0.622 0.426
Foo::f()           1.725 1.355        Foo::f()        1.210 0.890        Foo::f()        0.597 0.401
$x = $this->x         0.849 0.479     $x = $this->x      0.752 0.433     $x = $this->x      0.394 0.198
$this->x = 0          0.976 0.607     $this->x = 0       0.722 0.402     $this->x = 0       0.528 0.332
$this->x += 2          0.824 0.455    $this->x += 2       0.632 0.312    $this->x += 2       0.393 0.197
++$this->x            0.704 0.335     ++$this->x         0.587 0.267     ++$this->x         0.356 0.161
--$this->x          0.722 0.352       --$this->x       0.640 0.320       --$this->x       0.357 0.161
$this->x++            0.737 0.367     $this->x++         0.633 0.314     $this->x++         0.381 0.185
$this->x--          0.736 0.366       $this->x--       0.631 0.311       $this->x--       0.396 0.200
isset($this->x) 0.814 0.445           isset($this->x) 0.684 0.365        isset($this->x) 0.418 0.222
empty($this->x) 0.816 0.446           empty($this->x) 0.662 0.342        empty($this->x) 0.426 0.230
$this->f()          1.418 1.048       $this->f()       0.937 0.617       $this->f()       0.733 0.537
$x = Foo::TEST 0.381 0.011            $x = Foo::TEST 0.555 0.235         $x = Foo::TEST 0.395 0.199
new Foo()             2.692 2.323     new Foo()          2.393 2.074     new Foo()          1.360 1.164
$x = TEST              0.674 0.305    $x = TEST           0.596 0.276    $x = TEST           0.284 0.089
$x = $_GET              0.718 0.349   $x = $_GET           0.546 0.226   $x = $_GET           0.404 0.208
$x = $GLOBALS['v'] 1.018 0.648        $x = $GLOBALS['v'] 0.856 0.536     $x = $GLOBALS['v'] 0.576 0.380
$x = $hash['v'] 0.788 0.418           $x = $hash['v'] 0.592 0.272        $x = $hash['v'] 0.440 0.244
$x = $str[0]         1.291 0.922      $x = $str[0]      0.839 0.520      $x = $str[0]      0.606 0.410
------------------------              ------------------------           ------------------------

PHP 5.2.9: 31.355'' PHP 5.3: 24.830'' PHP 5.4: 14.946''
Funciones
Palabras recervadas
     Features
hex2bin()
trait       http_response_codes()
callable    get_declared_traits()
insteadof   getimagesizefromstring()
            trait_exists()
            header_register_callback()
            class_uses()
            session_status()
            session_register_shutdown()
            mysqli_error_list()
            mysqli_stmt_error_list()
            etc...
Formato para
números binarios

     <?php
     $nroBinario = 0b10;
     echo $nroBinario.PHP_EOL;

     //return 2
Interfaz JsonSerializable
<?php
class Freddy implements JsonSerializable
{
   public $data = [];
   public function __construct() {
     $this->data = array(
         'Federico', 'Lozada', 'Mosto'
      );
   }
   public function jsonSerialize() {return $this->data;}
}
echo json_encode(new Freddy());
//return ["Federico","Lozada","Mosto"]

//PHP < 5.4
//{"data":["Federico","Lozada","Mosto"]}
Sesiones
- session_status
- session_handler
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
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")
    );
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();
High Precision Timer
<?php
// PHP < 5.4
$start = microtime(1);
sleep(2);
echo "time: ", (microtime(1) - $start);
//return time: 2.0010209083557


// PHP >= 5.4
sleep(2);
$start = $_SERVER['REQUEST_TIME_FLOAT'];
echo "time: ".(microtime(1) - $start);
//return time: 2.0010209083557
Clases
   &
Closures
   &
 Arrays
Acceso a metodos en la instanciación




<?php
class Test
{
     public function foo(){ return 'foo';}
}

echo (new Test())->foo();

//return foo
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
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
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
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
Sintaxis de array compactos



                                //return
                                array(6) {
                                  [0]=>
<?php                             int(0)
$array = [0, 1, 2, 3, 4];         [1]=>
var_dump($array);                 int(1)
                                  [2]=>
                                  int(2)
                                  [3]=>
                                  int(3)
                                  [4]=>
                                  int(4)
                                }
Array por referencia (Array Deferencing)



<?php
$txt = "Erase una vez";
echo explode(" ", $txt)[0]; //return Erase
echo PHP_EOL;

function getName() {
  return array(
     'usuario' => array(
        'nombre'=>'Federico'
     )
  );
}

echo getName()['usuario']['nombre']; //return Federico
echo PHP_EOL;
Built-in web server
~/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
~/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
TRAITS
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
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!
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
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
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();
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
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
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
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
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
Functions & Extensiones
session_is_registered()
session_register()
session_unregister()
define_syslog_variables()
get_magic_quotes_gpc && get_magic_quotes_runtime
siempre devuelven false
import_request_variables()
mysqli_bind_param()
mysqli_bind_result()
mysqli_fetch()
Sqlite (no afecta a sqlite3)
Para los temerosos...
Tutorial para instalar de
manera fácil varias
versiones de PHP
en un mismo servidor:

http://bit.ly/HWJ5lW
¿Preguntas?

More Related Content

What's hot

Designing Opeation Oriented Web Applications / YAPC::Asia Tokyo 2011
Designing Opeation Oriented Web Applications / YAPC::Asia Tokyo 2011Designing Opeation Oriented Web Applications / YAPC::Asia Tokyo 2011
Designing Opeation Oriented Web Applications / YAPC::Asia Tokyo 2011Masahiro Nagano
 
PHP 7 – What changed internally? (Forum PHP 2015)
PHP 7 – What changed internally? (Forum PHP 2015)PHP 7 – What changed internally? (Forum PHP 2015)
PHP 7 – What changed internally? (Forum PHP 2015)Nikita Popov
 
Can't Miss Features of PHP 5.3 and 5.4
Can't Miss Features of PHP 5.3 and 5.4Can't Miss Features of PHP 5.3 and 5.4
Can't Miss Features of PHP 5.3 and 5.4Jeff Carouth
 
Crazy things done on PHP
Crazy things done on PHPCrazy things done on PHP
Crazy things done on PHPTaras Kalapun
 
PHP 7 – What changed internally?
PHP 7 – What changed internally?PHP 7 – What changed internally?
PHP 7 – What changed internally?Nikita Popov
 
Descobrindo a linguagem Perl
Descobrindo a linguagem PerlDescobrindo a linguagem Perl
Descobrindo a linguagem Perlgarux
 
Internationalizing CakePHP Applications
Internationalizing CakePHP ApplicationsInternationalizing CakePHP Applications
Internationalizing CakePHP ApplicationsPierre MARTIN
 
R57shell
R57shellR57shell
R57shellady36
 
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
 
Extbase and Beyond
Extbase and BeyondExtbase and Beyond
Extbase and BeyondJochen Rau
 
The History of PHPersistence
The History of PHPersistenceThe History of PHPersistence
The History of PHPersistenceHugo Hamon
 
Database Design Patterns
Database Design PatternsDatabase Design Patterns
Database Design PatternsHugo Hamon
 
Doctrine fixtures
Doctrine fixturesDoctrine fixtures
Doctrine fixturesBill Chang
 

What's hot (20)

Nubilus Perl
Nubilus PerlNubilus Perl
Nubilus Perl
 
Perl Web Client
Perl Web ClientPerl Web Client
Perl Web Client
 
Designing Opeation Oriented Web Applications / YAPC::Asia Tokyo 2011
Designing Opeation Oriented Web Applications / YAPC::Asia Tokyo 2011Designing Opeation Oriented Web Applications / YAPC::Asia Tokyo 2011
Designing Opeation Oriented Web Applications / YAPC::Asia Tokyo 2011
 
PHP 7 – What changed internally? (Forum PHP 2015)
PHP 7 – What changed internally? (Forum PHP 2015)PHP 7 – What changed internally? (Forum PHP 2015)
PHP 7 – What changed internally? (Forum PHP 2015)
 
Can't Miss Features of PHP 5.3 and 5.4
Can't Miss Features of PHP 5.3 and 5.4Can't Miss Features of PHP 5.3 and 5.4
Can't Miss Features of PHP 5.3 and 5.4
 
Crazy things done on PHP
Crazy things done on PHPCrazy things done on PHP
Crazy things done on PHP
 
zinno
zinnozinno
zinno
 
PHP 7 – What changed internally?
PHP 7 – What changed internally?PHP 7 – What changed internally?
PHP 7 – What changed internally?
 
Descobrindo a linguagem Perl
Descobrindo a linguagem PerlDescobrindo a linguagem Perl
Descobrindo a linguagem Perl
 
C99
C99C99
C99
 
Internationalizing CakePHP Applications
Internationalizing CakePHP ApplicationsInternationalizing CakePHP Applications
Internationalizing CakePHP Applications
 
PHP and MySQL
PHP and MySQLPHP and MySQL
PHP and MySQL
 
Php
PhpPhp
Php
 
R57shell
R57shellR57shell
R57shell
 
Perl 6 by example
Perl 6 by examplePerl 6 by example
Perl 6 by example
 
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
 
Extbase and Beyond
Extbase and BeyondExtbase and Beyond
Extbase and Beyond
 
The History of PHPersistence
The History of PHPersistenceThe History of PHPersistence
The History of PHPersistence
 
Database Design Patterns
Database Design PatternsDatabase Design Patterns
Database Design Patterns
 
Doctrine fixtures
Doctrine fixturesDoctrine fixtures
Doctrine fixtures
 

Viewers also liked

Solucionador de problemas
Solucionador de problemasSolucionador de problemas
Solucionador de problemasAbraham Ender
 
INDUSTRIA FARMACÉUTICA EXPEDIENTES NO AUTORIZADOS
INDUSTRIA FARMACÉUTICA EXPEDIENTES NO AUTORIZADOSINDUSTRIA FARMACÉUTICA EXPEDIENTES NO AUTORIZADOS
INDUSTRIA FARMACÉUTICA EXPEDIENTES NO AUTORIZADOSAbraham Ender
 
Las investigaciones científicas oscuras y sospechosas son desenfrenadas
Las investigaciones científicas oscuras y sospechosas son desenfrenadasLas investigaciones científicas oscuras y sospechosas son desenfrenadas
Las investigaciones científicas oscuras y sospechosas son desenfrenadasAbraham Ender
 
Del Homo Sapiens al Homo Depredator o cómo fabricar la sexta extinción masiva...
Del Homo Sapiens al Homo Depredator o cómo fabricar la sexta extinción masiva...Del Homo Sapiens al Homo Depredator o cómo fabricar la sexta extinción masiva...
Del Homo Sapiens al Homo Depredator o cómo fabricar la sexta extinción masiva...Abraham Ender
 
INDUSTRIA FARMACÉUTICA EXPEDIENTES NO AUTORIZADOS
INDUSTRIA FARMACÉUTICA EXPEDIENTES NO AUTORIZADOSINDUSTRIA FARMACÉUTICA EXPEDIENTES NO AUTORIZADOS
INDUSTRIA FARMACÉUTICA EXPEDIENTES NO AUTORIZADOSAbraham Ender
 

Viewers also liked (6)

Solucionador de problemas
Solucionador de problemasSolucionador de problemas
Solucionador de problemas
 
INDUSTRIA FARMACÉUTICA EXPEDIENTES NO AUTORIZADOS
INDUSTRIA FARMACÉUTICA EXPEDIENTES NO AUTORIZADOSINDUSTRIA FARMACÉUTICA EXPEDIENTES NO AUTORIZADOS
INDUSTRIA FARMACÉUTICA EXPEDIENTES NO AUTORIZADOS
 
Nuevatecnologia
NuevatecnologiaNuevatecnologia
Nuevatecnologia
 
Las investigaciones científicas oscuras y sospechosas son desenfrenadas
Las investigaciones científicas oscuras y sospechosas son desenfrenadasLas investigaciones científicas oscuras y sospechosas son desenfrenadas
Las investigaciones científicas oscuras y sospechosas son desenfrenadas
 
Del Homo Sapiens al Homo Depredator o cómo fabricar la sexta extinción masiva...
Del Homo Sapiens al Homo Depredator o cómo fabricar la sexta extinción masiva...Del Homo Sapiens al Homo Depredator o cómo fabricar la sexta extinción masiva...
Del Homo Sapiens al Homo Depredator o cómo fabricar la sexta extinción masiva...
 
INDUSTRIA FARMACÉUTICA EXPEDIENTES NO AUTORIZADOS
INDUSTRIA FARMACÉUTICA EXPEDIENTES NO AUTORIZADOSINDUSTRIA FARMACÉUTICA EXPEDIENTES NO AUTORIZADOS
INDUSTRIA FARMACÉUTICA EXPEDIENTES NO AUTORIZADOS
 

Similar to PHP 5.4

Php tips-and-tricks4128
Php tips-and-tricks4128Php tips-and-tricks4128
Php tips-and-tricks4128PrinceGuru MS
 
[PL] Jak nie zostać "programistą" PHP?
[PL] Jak nie zostać "programistą" PHP?[PL] Jak nie zostać "programistą" PHP?
[PL] Jak nie zostać "programistą" PHP?Radek Benkel
 
The Origin of Lithium
The Origin of LithiumThe Origin of Lithium
The Origin of LithiumNate Abele
 
関西PHP勉強会 php5.4つまみぐい
関西PHP勉強会 php5.4つまみぐい関西PHP勉強会 php5.4つまみぐい
関西PHP勉強会 php5.4つまみぐいHisateru Tanaka
 
PHP in 2018 - Q4 - AFUP Limoges
PHP in 2018 - Q4 - AFUP LimogesPHP in 2018 - Q4 - AFUP Limoges
PHP in 2018 - Q4 - AFUP Limoges✅ William Pinaud
 
Operation Oriented Web Applications / Yokohama pm7
Operation Oriented Web Applications / Yokohama pm7Operation Oriented Web Applications / Yokohama pm7
Operation Oriented Web Applications / Yokohama pm7Masahiro Nagano
 
Dirty Secrets of the PHP SOAP Extension
Dirty Secrets of the PHP SOAP ExtensionDirty Secrets of the PHP SOAP Extension
Dirty Secrets of the PHP SOAP ExtensionAdam Trachtenberg
 
Generated Power: PHP 5.5 Generators
Generated Power: PHP 5.5 GeneratorsGenerated Power: PHP 5.5 Generators
Generated Power: PHP 5.5 GeneratorsMark Baker
 
PHP Data Objects
PHP Data ObjectsPHP Data Objects
PHP Data ObjectsWez Furlong
 
Good Evils In Perl (Yapc Asia)
Good Evils In Perl (Yapc Asia)Good Evils In Perl (Yapc Asia)
Good Evils In Perl (Yapc Asia)Kang-min Liu
 
Debugging: Rules & Tools
Debugging: Rules & ToolsDebugging: Rules & Tools
Debugging: Rules & ToolsIan Barber
 
SPL: The Missing Link in Development
SPL: The Missing Link in DevelopmentSPL: The Missing Link in Development
SPL: The Missing Link in Developmentjsmith92
 
Unit testing with zend framework PHPBenelux
Unit testing with zend framework PHPBeneluxUnit testing with zend framework PHPBenelux
Unit testing with zend framework PHPBeneluxMichelangelo van Dam
 
PHP Functions & Arrays
PHP Functions & ArraysPHP Functions & Arrays
PHP Functions & ArraysHenry Osborne
 
Document Classification In PHP
Document Classification In PHPDocument Classification In PHP
Document Classification In PHPIan Barber
 

Similar to PHP 5.4 (20)

Php tips-and-tricks4128
Php tips-and-tricks4128Php tips-and-tricks4128
Php tips-and-tricks4128
 
[PL] Jak nie zostać "programistą" PHP?
[PL] Jak nie zostać "programistą" PHP?[PL] Jak nie zostać "programistą" PHP?
[PL] Jak nie zostać "programistą" PHP?
 
PHPSpec BDD for PHP
PHPSpec BDD for PHPPHPSpec BDD for PHP
PHPSpec BDD for PHP
 
The Origin of Lithium
The Origin of LithiumThe Origin of Lithium
The Origin of Lithium
 
関西PHP勉強会 php5.4つまみぐい
関西PHP勉強会 php5.4つまみぐい関西PHP勉強会 php5.4つまみぐい
関西PHP勉強会 php5.4つまみぐい
 
PHP in 2018 - Q4 - AFUP Limoges
PHP in 2018 - Q4 - AFUP LimogesPHP in 2018 - Q4 - AFUP Limoges
PHP in 2018 - Q4 - AFUP Limoges
 
Operation Oriented Web Applications / Yokohama pm7
Operation Oriented Web Applications / Yokohama pm7Operation Oriented Web Applications / Yokohama pm7
Operation Oriented Web Applications / Yokohama pm7
 
Web 8 | Introduction to PHP
Web 8 | Introduction to PHPWeb 8 | Introduction to PHP
Web 8 | Introduction to PHP
 
Dirty Secrets of the PHP SOAP Extension
Dirty Secrets of the PHP SOAP ExtensionDirty Secrets of the PHP SOAP Extension
Dirty Secrets of the PHP SOAP Extension
 
Generated Power: PHP 5.5 Generators
Generated Power: PHP 5.5 GeneratorsGenerated Power: PHP 5.5 Generators
Generated Power: PHP 5.5 Generators
 
PHP Data Objects
PHP Data ObjectsPHP Data Objects
PHP Data Objects
 
Good Evils In Perl (Yapc Asia)
Good Evils In Perl (Yapc Asia)Good Evils In Perl (Yapc Asia)
Good Evils In Perl (Yapc Asia)
 
Debugging: Rules & Tools
Debugging: Rules & ToolsDebugging: Rules & Tools
Debugging: Rules & Tools
 
Smelling your code
Smelling your codeSmelling your code
Smelling your code
 
SPL: The Missing Link in Development
SPL: The Missing Link in DevelopmentSPL: The Missing Link in Development
SPL: The Missing Link in Development
 
Unit testing with zend framework PHPBenelux
Unit testing with zend framework PHPBeneluxUnit testing with zend framework PHPBenelux
Unit testing with zend framework PHPBenelux
 
PHP Functions & Arrays
PHP Functions & ArraysPHP Functions & Arrays
PHP Functions & Arrays
 
Document Classification In PHP
Document Classification In PHPDocument Classification In PHP
Document Classification In PHP
 
php AND MYSQL _ppt.pdf
php AND MYSQL _ppt.pdfphp AND MYSQL _ppt.pdf
php AND MYSQL _ppt.pdf
 
Php Tutorials for Beginners
Php Tutorials for BeginnersPhp Tutorials for Beginners
Php Tutorials for Beginners
 

More from Federico Damián Lozada Mosto (8)

Php 5.6
Php 5.6Php 5.6
Php 5.6
 
Solid Principles & Design patterns with PHP examples
Solid Principles & Design patterns with PHP examplesSolid Principles & Design patterns with PHP examples
Solid Principles & Design patterns with PHP examples
 
Implementando una Arquitectura de Microservicios
Implementando una Arquitectura de MicroserviciosImplementando una Arquitectura de Microservicios
Implementando una Arquitectura de Microservicios
 
Key features PHP 5.3 - 5.6
Key features PHP 5.3 - 5.6Key features PHP 5.3 - 5.6
Key features PHP 5.3 - 5.6
 
Composer
ComposerComposer
Composer
 
Travis-CI - Continuos integration in the cloud for PHP
Travis-CI - Continuos integration in the cloud for PHPTravis-CI - Continuos integration in the cloud for PHP
Travis-CI - Continuos integration in the cloud for PHP
 
Introduction to unit testing
Introduction to unit testingIntroduction to unit testing
Introduction to unit testing
 
Scrum
ScrumScrum
Scrum
 

Recently uploaded

GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 

Recently uploaded (20)

GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 

PHP 5.4

  • 5. empty_loop 0.369 empty_loop 0.320 empty_loop 0.196 func() 1.318 0.948 func() 0.748 0.428 func() 0.654 0.458 undef_func() 1.635 1.265 undef_func() 0.760 0.440 undef_func() 0.599 0.403 int_func() 1.068 0.698 int_func() 0.703 0.384 int_func() 0.682 0.486 $x = self::$x 0.878 0.509 $x = self::$x 0.685 0.366 $x = self::$x 0.408 0.212 self::$x = 0 0.818 0.448 self::$x = 0 0.764 0.445 self::$x = 0 0.487 0.291 isset(self::$x) 0.843 0.474 isset(self::$x) 0.639 0.319 isset(self::$x) 0.484 0.288 empty(self::$x) 0.879 0.509 empty(self::$x) 0.690 0.370 empty(self::$x) 0.379 0.184 $x = Foo::$x 1.107 0.737 $x = Foo::$x 0.987 0.667 $x = Foo::$x 0.371 0.176 Foo::$x = 0 1.054 0.685 Foo::$x = 0 1.084 0.765 Foo::$x = 0 0.351 0.155 isset(Foo::$x) 1.041 0.672 isset(Foo::$x) 0.928 0.608 isset(Foo::$x) 0.322 0.126 empty(Foo::$x) 1.051 0.682 empty(Foo::$x) 0.970 0.651 empty(Foo::$x) 0.346 0.150 self::f() 1.412 1.043 self::f() 1.085 0.765 self::f() 0.622 0.426 Foo::f() 1.725 1.355 Foo::f() 1.210 0.890 Foo::f() 0.597 0.401 $x = $this->x 0.849 0.479 $x = $this->x 0.752 0.433 $x = $this->x 0.394 0.198 $this->x = 0 0.976 0.607 $this->x = 0 0.722 0.402 $this->x = 0 0.528 0.332 $this->x += 2 0.824 0.455 $this->x += 2 0.632 0.312 $this->x += 2 0.393 0.197 ++$this->x 0.704 0.335 ++$this->x 0.587 0.267 ++$this->x 0.356 0.161 --$this->x 0.722 0.352 --$this->x 0.640 0.320 --$this->x 0.357 0.161 $this->x++ 0.737 0.367 $this->x++ 0.633 0.314 $this->x++ 0.381 0.185 $this->x-- 0.736 0.366 $this->x-- 0.631 0.311 $this->x-- 0.396 0.200 isset($this->x) 0.814 0.445 isset($this->x) 0.684 0.365 isset($this->x) 0.418 0.222 empty($this->x) 0.816 0.446 empty($this->x) 0.662 0.342 empty($this->x) 0.426 0.230 $this->f() 1.418 1.048 $this->f() 0.937 0.617 $this->f() 0.733 0.537 $x = Foo::TEST 0.381 0.011 $x = Foo::TEST 0.555 0.235 $x = Foo::TEST 0.395 0.199 new Foo() 2.692 2.323 new Foo() 2.393 2.074 new Foo() 1.360 1.164 $x = TEST 0.674 0.305 $x = TEST 0.596 0.276 $x = TEST 0.284 0.089 $x = $_GET 0.718 0.349 $x = $_GET 0.546 0.226 $x = $_GET 0.404 0.208 $x = $GLOBALS['v'] 1.018 0.648 $x = $GLOBALS['v'] 0.856 0.536 $x = $GLOBALS['v'] 0.576 0.380 $x = $hash['v'] 0.788 0.418 $x = $hash['v'] 0.592 0.272 $x = $hash['v'] 0.440 0.244 $x = $str[0] 1.291 0.922 $x = $str[0] 0.839 0.520 $x = $str[0] 0.606 0.410 ------------------------ ------------------------ ------------------------ PHP 5.2.9: 31.355'' PHP 5.3: 24.830'' PHP 5.4: 14.946''
  • 7. hex2bin() trait http_response_codes() callable get_declared_traits() insteadof getimagesizefromstring() trait_exists() header_register_callback() class_uses() session_status() session_register_shutdown() mysqli_error_list() mysqli_stmt_error_list() etc...
  • 8. Formato para números binarios <?php $nroBinario = 0b10; echo $nroBinario.PHP_EOL; //return 2
  • 10. <?php class Freddy implements JsonSerializable { public $data = []; public function __construct() { $this->data = array( 'Federico', 'Lozada', 'Mosto' ); } public function jsonSerialize() {return $this->data;} } echo json_encode(new Freddy()); //return ["Federico","Lozada","Mosto"] //PHP < 5.4 //{"data":["Federico","Lozada","Mosto"]}
  • 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();
  • 16. <?php // PHP < 5.4 $start = microtime(1); sleep(2); echo "time: ", (microtime(1) - $start); //return time: 2.0010209083557 // PHP >= 5.4 sleep(2); $start = $_SERVER['REQUEST_TIME_FLOAT']; echo "time: ".(microtime(1) - $start); //return time: 2.0010209083557
  • 17. Clases & Closures & Arrays
  • 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
  • 23. Sintaxis de array compactos //return array(6) { [0]=> <?php int(0) $array = [0, 1, 2, 3, 4]; [1]=> var_dump($array); int(1) [2]=> int(2) [3]=> int(3) [4]=> int(4) }
  • 24. Array por referencia (Array Deferencing) <?php $txt = "Erase una vez"; echo explode(" ", $txt)[0]; //return Erase echo PHP_EOL; function getName() { return array( 'usuario' => array( 'nombre'=>'Federico' ) ); } echo getName()['usuario']['nombre']; //return Federico echo PHP_EOL;
  • 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
  • 40. Functions & Extensiones session_is_registered() session_register() session_unregister() define_syslog_variables() get_magic_quotes_gpc && get_magic_quotes_runtime siempre devuelven false import_request_variables() mysqli_bind_param() mysqli_bind_result() mysqli_fetch() Sqlite (no afecta a sqlite3)
  • 41. Para los temerosos... Tutorial para instalar de manera fácil varias versiones de PHP en un mismo servidor: http://bit.ly/HWJ5lW