Mar 05

PHP6 наближава. Въпреки че в PHP5.3 доста от нещата, които се предвиждаха в PHP6, бяха добавени, но винаги има какво още да се желае.

А и гледам, че е модерно някакви хора да пишат какво искат да има в новата версия на езика, който ползват, та викам и аз да драсна нещо по тая тема.

  1. Namespace ( има го в PHP5.3 )
  2. Late static binding ( има го в PHP5.3 )
  3. ?: defaulter ( ще го има в PHP6 )

    $val = $val ?: 'default value';
    // това е същото като в JavaScript
    // val = val || 'default value';
    
  4. 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');
    
  5. 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.

  6. 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';
    	}
    }
    
  7. 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');
    
  8. Промяна на вече дефиниран клас
    Това няма как да го направят (поне със сегашната структура на PHP), но ми се вижда интересна идея.

    class Some() {
    	function foo() {
    		print 1;
    	}
    }
    
    extend class Some {
    	function newFoo(){
    		print 2
    	}
    }
    
    $t = new Some();
    $t->foo();
    $t->newFoo();
    
  9. По кратък list()
    Не е много, но ще спаси доста писане

    $var1, $var2 = $var2, $var1;
    $var1, $var2 = array($var2, $var1);
    // да е същото като
    list($var1, $var2) = array($var2, $var1);
    
  10. Да може да се вика include в тялото на класИдеята да може да се ‘сглобява’ клас, така че доста по-прегледен и подреден ще стане кода.
    class Person {
    	include 'getters.php';
    	include 'setters.php';
    	include 'actions.php';
    	include 'static_methods.php';
    }
    

4 коментара за "PHP6 whishlist"

  1. Калоян К. Цветков каза:

    Сигурен ли си, че в 5.3 ще има namespaces ;)

    Иначе най-фенското ще е късия синтаксис за масивите ;)

    А, да, и вече кой ползва list() ? Поне засега foreach е най-бързо, поне аз като правих едни “пишман” бенчмаркове преди няколко месеца.

  2. Jack каза:

    :) ами до колкото знам namespaces ги има в 5.3(поне така пише в документацията, не съм ги пробвал лично).
    А това за краткия list() ми е идеята да може такива неща да има:

    function foo($a) {
    return $a, $a+1
    }

    $b, $b1 = foo(1);
    иначе друга полза няма от тях (освен за разменяне на променливи също)

  3. pesho каза:

    пише се “ВАРИАНТ” …

  4. Radoslav Stankov каза:

    Благодаря за го отбеляза, че и малко код hightligher-а се беше разместил. :)
    Вече е оправено

Какво мислите по въпроса