<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE html PUBLIC '-//W3C/DTD XHTML+Voice 1.2 /EN' 'http://www.voicexml.org/specs/multimodal/x+v/12/dtd/xhtml+voice12.dtd'>
<html xmlns='http://www.w3.org/1999/xhtml' xmlns:ev='http://www.w3.org/2001/xml-events'>
<head>
<link rel='canonical' href='http://pabi3.com/blog/ake-novinky-prinesie-php-5-3/' />
<link rel='stylesheet' href='http://pabi3.com/modules/items/voice.css' type='text/css' media='all' />
<form xmlns='http://www.w3.org/2001/vxml' id='title'>
<block>
The article Ake novinky prinesie PHP 5.3? is written by PaBi3
</block>
</form>
<form xmlns='http://www.w3.org/2001/vxml' id='body'>
<block>

Rozhodol som sa vyskusat najnovsi snapshot PHP 5.3, ktory si mozete stiahnut na
adrese snaps.php.net. Budete mat moznost byt ocareny novymi vlastnostami PHP
jazyka. Ked som zistil co vsetko novy snapshot prinasa, tak myslim ze PHP 6
uz nebude ziadnym velkym prekvapenim. Osobne som sa najviac tesil na namespaces.
Ked som ich vyskusal, uz som sa tak netesil. Je pekne, ze v PHP budete moct pouzit
namespaces ale nie tak dokonale ako napriklad v C#. Namespace v PHP je mozne pouzit iba jeden v jednom subore.
</block>
</form>
<form xmlns='http://www.w3.org/2001/vxml' id='full'>
<block>
Kiez by to mohlo byt takto:
&lt;?php

namespace ns1
{
	namespace ns11
	{
		class A
		{
			public function __construct()
			{
				&hellip;
			}
		}
	}
}

namespace ns2
{
	class A
	{
		public function __construct()
		{
			&hellip;
		}
	}

	class B
	{
		public function __construct()
		{
			&hellip;
		}
	}
}

Svoju predstavu o namespaces musim zahodit, pretoze realita je takato:
&lt;?php

namespace ns1;

class A
{
	public function __construct()
	{
		&hellip;
	}
}


Najvyznamnejsie novinky

Pre mna medzi najvyznamnejsie novinky v PHP 5.3 patria:



Namespaces
Late Static Binding
Dynamic static calls
a magicka metoda __callStatic()



Keby som to mal hodnotit, tak implementacia namespaces v PHP sa mi nepaci, late static binding
mozete najst fakt len v PHP a dynamic static calls su nedorobene. Jedina hotova novinka je asi
magicka metoda __callStatic(), ktoru tak casto nevyuzijem.


Preco su dynamic static calls nedorobky?
Pretoze sice mozete pouzit kod typu:

$class = 'A';
$class::method();

avsak nemozete pouzit nieco ako:

&lt;?php

$namespace = 'Basic';
$class     = 'A';

$namespace::$class::method();


Priklad pouzitia vacsiny noviniek
a.php
&lt;?phpnamespace&nbsp;Basic;abstract&nbsp;class&nbsp;A{&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;protected&nbsp;$foo&nbsp;=&nbsp;'AAA';&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;public&nbsp;function&nbsp;selfWay()&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print&nbsp;self::$foo;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;public&nbsp;function&nbsp;staticWay()&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print&nbsp;static::$foo;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;public&nbsp;function&nbsp;__callStatic($method,&nbsp;array&nbsp;$params)&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"Bola&nbsp;volana&nbsp;neexistujuca&nbsp;metoda&nbsp;$method(".implode(',',$params).")";&nbsp;&nbsp;&nbsp;&nbsp;}}abstract&nbsp;class&nbsp;B&nbsp;extends&nbsp;A{&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;protected&nbsp;$foo&nbsp;=&nbsp;'BBB';}

b.php
&lt;?phpheader('Content-Type:text/html;&nbsp;charset=utf-8');require_once('a.php');import&nbsp;Basic&nbsp;as&nbsp;myBasic;import&nbsp;Basic&nbsp;as&nbsp;mySecondBasic;abstract&nbsp;class&nbsp;C{&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;public&nbsp;function&nbsp;demo()&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"&lt;h2&gt;myBasic&lt;/h2&gt;\n";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myBasic::B::selfWay();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"&lt;br&nbsp;/&gt;\n";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myBasic::B::staticWay();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"&lt;hr&nbsp;/&gt;\n";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"&lt;h2&gt;mySecondBasic&lt;/h2&gt;\n";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mySecondBasic::B::selfWay();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"&lt;br&nbsp;/&gt;\n";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mySecondBasic::B::staticWay();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"&lt;hr&nbsp;/&gt;\n";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"&lt;h2&gt;__callStatic&lt;/h2&gt;\n";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myBasic::B::Unknown('a','b','c');&nbsp;&nbsp;&nbsp;&nbsp;}}$class&nbsp;=&nbsp;'C';$class::demo();</block>
</form>
<base href='http://pabi3.com/' />
<title>Aké novinky prinesie PHP 5.3?</title>
</head>
<body ev:event='load' ev:handler='#title'>
<a href='http://pabi3.com/blog/ake-novinky-prinesie-php-5-3/' title='Návrat'>Návrat</a>
<h1 style='padding:0.5em;'>Aké novinky prinesie PHP 5.3?</h1>
<ul>
<li ev:event='click' ev:handler='#body'>Speak introduction</li>
<li ev:event='click' ev:handler='#full'>Speak full</li>
</ul>
</body>
</html>

