Rozhodol som sa vyskúšať najnovší snapshot PHP 5.3, ktorý si môžete stiahnúť na adrese snaps.php.net. Budete mať možnosť byť očarený novými vlastnosťami PHP jazyka. Keď som zistil čo všetko nový snapshot prináša, tak myslím že PHP 6 už nebude žiadnym veľkým prekvapením. Osobne som sa najviac tešil na namespaces. Keď som ich vyskúšal, už som sa tak netešil. Je pekné, že v PHP budete môcť použiť namespaces ale nie tak dokonale ako napríklad v C#. Namespace v PHP je možné použiť iba jeden v jednom súbore.
Aké novinky prinesie PHP 5.3?
Aké novinky prinesie PHP 5.3?
Kiež by to mohlo byť takto:
<?php namespace ns1 { namespace ns11 { class A { public function __construct() { … } } } } namespace ns2 { class A { public function __construct() { … } } class B { public function __construct() { … } } }
Svoju predstavu o namespaces musím zahodiť, pretože realita je takáto:
<?php namespace ns1; class A { public function __construct() { … } }
Najvýznamnejšie novinky
Pre mňa medzi najvýznamnejšie novinky v PHP 5.3 patria:
- Namespaces
- Late Static Binding
- Dynamic static calls
- a magická metóda __callStatic()
Keby som to mal hodnotiť, tak implementácia namespaces v PHP sa mi nepáči, late static binding
môžete nájsť fakt len v PHP a dynamic static calls sú nedorobené. Jediná hotová novinka je asi
magická metóda __callStatic()
, ktorú tak často nevyužijem.
Prečo sú dynamic static calls nedorobky?
Pretože síce môžete použiť kód typu:
$class = 'A'; $class::method();
avšak nemôžete použiť niečo ako:
<?php $namespace = 'Basic'; $class = 'A'; $namespace::$class::method();
Príklad použitia väčšiny noviniek
a.php
<?php
namespace Basic;
abstract class A
{
static protected $foo = 'AAA';
static public function selfWay()
{
print self::$foo;
}
static public function staticWay()
{
print static::$foo;
}
static public function __callStatic($method, array $params)
{
echo "Bola volaná neexistujúca metóda $method(".implode(',',$params).")";
}
}
abstract class B extends A
{
static protected $foo = 'BBB';
}
b.php
<?php
header('Content-Type:text/html; charset=utf-8');
require_once('a.php');
import Basic as myBasic;
import Basic as mySecondBasic;
abstract class C
{
static public function demo()
{
echo "<h2>myBasic</h2>\n";
myBasic::B::selfWay();
echo "<br />\n";
myBasic::B::staticWay();
echo "<hr />\n";
echo "<h2>mySecondBasic</h2>\n";
mySecondBasic::B::selfWay();
echo "<br />\n";
mySecondBasic::B::staticWay();
echo "<hr />\n";
echo "<h2>__callStatic</h2>\n";
myBasic::B::Unknown('a','b','c');
}
}
$class = 'C';
$class::demo();
Autor: PaBi3 ·
Kategória: Programovanie ·
Dátum: 22.10.2007 00:01
Komentáre