Mar 05
PHP6 наближава. Въпреки че в PHP5.3 доста от нещата, които се предвиждаха в PHP6, бяха добавени, но винаги има какво още да се желае.
А и гледам, че е модерно някакви хора да пишат какво искат да има в новата версия на езика, който ползват, та викам и аз да драсна нещо по тая тема.
- Namespace ( има го в PHP5.3 )
- Late static binding ( има го в PHP5.3 )
-
?: defaulter ( ще го има в PHP6 )
$val = $val ?: 'default value'; // това е същото като в JavaScript // val = val || 'default value';
- Smarter arguments handling
function myFunction($one, array $everythingElse = array()){} myFunction('argument_one','these' => 'all','collect' => 'into','an' => 'array'); function myFunction2($one, ... $everythingElse = array()){} myFunction('argument_one', 'one', 'two', '...', 'million'); - Lambda, Proc, ….
$func = function () { print 'this is the one' }; $func(); function foo($func){ $func(); } foo($func);По принцип това може да се реализира с create_function ( http://bg2.php.net/create_function ) обаче това е малко (много) грозно. Да не говорим, че то създава функция, която просто се записва с име chr(0).lambda_n.
- Static blocks
Знам, че може да се пише код директно във файла на класа, но там вече protected / private са неважни, а и това ми се вижда доста по-прегледно. А и тука е малко странно какво ще става при наследяване и други такива ситуации.// вариант 1 class User extends ActiveRecod { self::has_many('Comments'); echo 'class loaded'; } // вариант 2 class UsersController extends Controller { static { self::verify('name', 'method'); echo 'class loaded'; } } // вариант 3 ( ако ще има такова нещо така ще става ) class Person { function __staticConstruct(){ echo 'class loaded'; } } - Short array syntax
[1,2,3,4,5] = array(1,2,3,4,5); {'name' => 'dasda'} = array('name' => 'dasasdas'); // - или - (1,2, 'name' => 'jack') = array(1,2, 'name' => 'jack'); - Промяна на вече дефиниран клас
Това няма как да го направят (поне със сегашната структура на PHP), но ми се вижда интересна идея.class Some() { function foo() { print 1; } } extend class Some { function newFoo(){ print 2 } } $t = new Some(); $t->foo(); $t->newFoo(); - По кратък list()
Не е много, но ще спаси доста писане$var1, $var2 = $var2, $var1; $var1, $var2 = array($var2, $var1); // да е същото като list($var1, $var2) = array($var2, $var1);
- Да може да се вика include в тялото на класИдеята да може да се ‘сглобява’ клас, така че доста по-прегледен и подреден ще стане кода.
class Person { include 'getters.php'; include 'setters.php'; include 'actions.php'; include 'static_methods.php'; }

June 8th, 2008 at 9:31 pm
Сигурен ли си, че в 5.3 ще има namespaces
Иначе най-фенското ще е късия синтаксис за масивите
А, да, и вече кой ползва list() ? Поне засега foreach е най-бързо, поне аз като правих едни “пишман” бенчмаркове преди няколко месеца.
June 8th, 2008 at 10:56 pm
А това за краткия list() ми е идеята да може такива неща да има:
function foo($a) {
return $a, $a+1
}
$b, $b1 = foo(1);
иначе друга полза няма от тях (освен за разменяне на променливи също)
November 18th, 2009 at 11:08 pm
пише се “ВАРИАНТ” …
November 19th, 2009 at 4:37 am
Благодаря за го отбеляза, че и малко код hightligher-а се беше разместил.
Вече е оправено