Hi,

I think this feature shouldn't go into 5.2, especially after 5.2.4RC1
release.
May be into 5.3

Thanks. Dmitry.

> -----Original Message-----
> From: Johannes Schlьter [mailto:[EMAIL PROTECTED] 
> Sent: Friday, August 03, 2007 1:55 AM
> To: php-cvs@lists.php.net
> Subject: [PHP-CVS] cvs: php-src(PHP_5_2) / NEWS /tests/lang 
> 041.phpt 042.phpt 043.phpt 044.phpt ZendEngine2 
> zend_language_parser.y 
> 
> 
> johannes              Thu Aug  2 21:55:23 2007 UTC
> 
>   Added files:                 (Branch: PHP_5_2)
>     /php-src/tests/lang       041.phpt 042.phpt 043.phpt 044.phpt 
> 
>   Modified files:              
>     /php-src  NEWS 
>     /ZendEngine2      zend_language_parser.y 
>   Log:
>   - Add possibility to call static class members using 
> variables (Etienne Kneuss)
>   
> http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2027.2.547.2.8
> 73&r2=1.2027.2.547.2.874&diff_format=u
> Index: php-src/NEWS
> diff -u php-src/NEWS:1.2027.2.547.2.873 
> php-src/NEWS:1.2027.2.547.2.874
> --- php-src/NEWS:1.2027.2.547.2.873   Thu Aug  2 20:30:31 2007
> +++ php-src/NEWS      Thu Aug  2 21:55:23 2007
> @@ -37,6 +37,8 @@
>  - Added PCRE_VERSION constant. (Tony)
>  - Added ReflectionExtension::info() function to print the 
> phpinfo() block for
>    an extension. (Johannes)
> +- Added possibility to call static class members using variables. 
> +(Etienne
> +  Kneuss)
>  
>  - Implemented FR #41884 
> (ReflectionClass::getDefaultProperties() does not handle 
>    static attributes). (Tony) 
> http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_language_parser
> .y?r1=1.160.2.4.2.6&r2=1.160.2.4.2.7&diff_format=u
> Index: ZendEngine2/zend_language_parser.y
> diff -u ZendEngine2/zend_language_parser.y:1.160.2.4.2.6 
> ZendEngine2/zend_language_parser.y:1.160.2.4.2.7
> --- ZendEngine2/zend_language_parser.y:1.160.2.4.2.6  Fri May 
> 18 18:36:04 2007
> +++ ZendEngine2/zend_language_parser.y        Thu Aug  2 21:55:23 2007
> @@ -18,7 +18,7 @@
>     
> +-------------------------------------------------------------
> ---------+
>  */
>  
> -/* $Id: zend_language_parser.y,v 1.160.2.4.2.6 2007/05/18 
> 18:36:04 stas Exp $ */
> +/* $Id: zend_language_parser.y,v 1.160.2.4.2.7 2007/08/02 21:55:23 
> +johannes Exp $ */
>  
>  /*
>   * LALR shift/reduce conflicts and how they are resolved:
> @@ -630,6 +630,12 @@
>       |       fully_qualified_class_name 
> T_PAAMAYIM_NEKUDOTAYIM variable_without_objects '(' { 
> zend_do_end_variable_parse(BP_VAR_R, 0 TSRMLS_CC); 
> zend_do_begin_class_member_function_call(&$1, &$3 TSRMLS_CC); }
>                       function_call_parameter_list
>                       ')' { zend_do_end_function_call(NULL, 
> &$$, &$6, 1, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);}
> +     |       variable_class_name T_PAAMAYIM_NEKUDOTAYIM 
> T_STRING '(' { zend_do_begin_class_member_function_call(&$1, 
> &$3 TSRMLS_CC); }
> +                     function_call_parameter_list
> +                     ')' { zend_do_end_function_call(NULL, 
> &$$, &$6, 1, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);}
> +     |       variable_class_name T_PAAMAYIM_NEKUDOTAYIM 
> variable_without_objects '(' { 
> zend_do_end_variable_parse(BP_VAR_R, 0 TSRMLS_CC); 
> zend_do_begin_class_member_function_call(&$1, &$3 TSRMLS_CC); }
> +                     function_call_parameter_list
> +                     ')' { zend_do_end_function_call(NULL, 
> &$$, &$6, 1, 1 TSRMLS_CC); 
> +zend_do_extended_fcall_end(TSRMLS_C);}
>       |       variable_without_objects  '(' { 
> zend_do_end_variable_parse(BP_VAR_R, 0 TSRMLS_CC); 
> zend_do_begin_dynamic_function_call(&$1 TSRMLS_CC); }
>                       function_call_parameter_list ')'
>                       { zend_do_end_function_call(&$1, &$$, 
> &$4, 0, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);}
> @@ -781,8 +787,13 @@
>  
>  static_member:
>               fully_qualified_class_name 
> T_PAAMAYIM_NEKUDOTAYIM variable_without_objects { $$ = $3; 
> zend_do_fetch_static_member(&$$, &$1 TSRMLS_CC); }
> +     |       variable_class_name T_PAAMAYIM_NEKUDOTAYIM 
> variable_without_objects { $$ = $3; 
> zend_do_fetch_static_member(&$$, &$1 TSRMLS_CC); }
> +
>  ;
>  
> +variable_class_name:
> +             reference_variable { 
> zend_do_end_variable_parse(BP_VAR_R, 0 
> +TSRMLS_CC); zend_do_fetch_class(&$$, &$1 TSRMLS_CC); } ;
>  
>  base_variable_with_function_calls:
>               base_variable           { $$ = $1; }
> @@ -907,6 +918,7 @@
>  
>  class_constant:
>               fully_qualified_class_name 
> T_PAAMAYIM_NEKUDOTAYIM T_STRING { zend_do_fetch_constant(&$$, 
> &$1, &$3, ZEND_RT TSRMLS_CC); }
> +     |       variable_class_name T_PAAMAYIM_NEKUDOTAYIM 
> T_STRING { zend_do_fetch_constant(&$$, &$1, &$3, ZEND_RT TSRMLS_CC); }
>  ;
>  
>  %%
> 
> http://cvs.php.net/viewvc.cgi/php-src/tests/lang/041.phpt?view
> =markup&rev=1.1
> Index: php-src/tests/lang/041.phpt
> +++ php-src/tests/lang/041.phpt
> --TEST--
> Dynamic access of static members
> --FILE--
> <?php
> class A {
>     public    static $b = 'foo';
> }
> 
> $classname       =  'A';
> $binaryClassname = b'A';
> $wrongClassname  =  'B';
> 
> echo $classname::$b."\n";
> echo $binaryClassname::$b."\n";
> echo $wrongClassname::$b."\n";
> 
> ?> 
> ===DONE===
> --EXPECTF--
> foo
> foo
> 
> Fatal error: Class 'B' not found in %s041.php on line %d
> 
> http://cvs.php.net/viewvc.cgi/php-src/tests/lang/042.phpt?view
> =markup&rev=1.1
> Index: php-src/tests/lang/042.phpt
> +++ php-src/tests/lang/042.phpt
> --TEST--
> Dynamic access of constants
> --FILE--
> <?php
> class A {
>     const B = 'foo';
> }
> 
> $classname       =  'A';
> $binaryClassname = b'A';
> $wrongClassname  =  'B';
> 
> echo $classname::B."\n";
> echo $binaryClassname::B."\n";
> echo $wrongClassname::B."\n";
> ?> 
> ===DONE===
> --EXPECTF--
> foo
> foo
> 
> Fatal error: Class 'B' not found in %s042.php on line %d
> 
> http://cvs.php.net/viewvc.cgi/php-src/tests/lang/043.phpt?view
> =markup&rev=1.1
> Index: php-src/tests/lang/043.phpt
> +++ php-src/tests/lang/043.phpt
> --TEST--
> Dynamic call for static methods
> --FILE--
> <?php
> class A {
>     static function foo() { return 'foo'; }
> }
> 
> $classname       =  'A';
> $binaryClassname = b'A';
> $wrongClassname  =  'B';
> 
> echo $classname::foo()."\n";
> echo $binaryClassname::foo()."\n";
> echo $wrongClassname::foo()."\n";
> ?> 
> ===DONE===
> --EXPECTF--
> foo
> foo
> 
> Fatal error: Class 'B' not found in %s043.php on line %d
> 
> http://cvs.php.net/viewvc.cgi/php-src/tests/lang/044.phpt?view
=markup&rev=1.1
Index: php-src/tests/lang/044.phpt
+++ php-src/tests/lang/044.phpt
--TEST--
Dynamic call for static methods dynamically named
--FILE--
<?php
class A {
    static function foo() { return 'foo'; }
}
$classname        =  'A';
$binaryClassname  = b'A';
$wrongClassname   =  'B';

$methodname       =  'foo';
$binaryMethodname = b'foo';

echo $classname::$methodname()."\n";
echo $classname::$binaryMethodname()."\n";

echo $binaryClassname::$methodname()."\n";
echo $binaryClassname::$binaryMethodname()."\n";

echo $wrongClassname::$binaryMethodname()."\n";
?> 
===DONE===
--EXPECTF--
foo
foo
foo
foo

Fatal error: Class 'B' not found in %s044.php on line %d

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to