Aké novinky prinesie PHP 5.3?

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()
	{
		…
	}
}

Najvýznamnejšie novinky

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.

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 
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();

22.10.2007 00:01

PaBi3

Programovanie