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.
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()
{
…
}
}
Pre mňa medzi najvýznamnejšie novinky v PHP 5.3 patria:
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.
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();
<?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';
}
<?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();