php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Return to Bug #55247
Patch 55247.diff revision 2011-07-27 04:46 UTC by pierrick@php.net

Patch 55247.diff for *General Issues Bug #55247

Patch version 2011-07-27 04:46 UTC

Return to Bug #55247 | Download this patch
Patch Revisions:

Developer: pierrick@php.net

Index: Zend/tests/bug55247.phpt
===================================================================
--- Zend/tests/bug55247.phpt	(revision 0)
+++ Zend/tests/bug55247.phpt	(revision 0)
@@ -0,0 +1,33 @@
+--TEST--
+Bug #55247 (Parser problem with static calls using string method name)
+--FILE--
+<?php
+class Test{
+	public static function __callStatic($method, $arguments)
+	{
+		echo $method . PHP_EOL;
+	}
+	public function __call($method, $arguments)
+	{
+		echo $method . PHP_EOL;
+	}
+}
+
+$method = 'method';
+
+$test = new Test();
+
+$test->method();
+$test->$method();
+$test->{'method'}();
+
+Test::method();
+Test::$method();
+Test::{'method'}();
+--EXPECT--
+method
+method
+method
+method
+method
+method

Property changes on: Zend/tests/bug55247.phpt
___________________________________________________________________
Added: svn:executable
   + *

Index: Zend/zend_language_parser.y
===================================================================
--- Zend/zend_language_parser.y	(revision 313589)
+++ Zend/zend_language_parser.y	(working copy)
@@ -795,13 +795,13 @@
 	|	T_NS_SEPARATOR namespace_name '(' { $3.u.op.opline_num = zend_do_begin_function_call(&$2, 0 TSRMLS_CC); }
 				function_call_parameter_list
 				')' { zend_do_end_function_call(&$2, &$$, &$5, 0, $3.u.op.opline_num TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C); }
-	|	class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING '(' { $4.u.op.opline_num = zend_do_begin_class_member_function_call(&$1, &$3 TSRMLS_CC); }
+	|	class_name T_PAAMAYIM_NEKUDOTAYIM variable_name '(' { $4.u.op.opline_num = zend_do_begin_class_member_function_call(&$1, &$3 TSRMLS_CC); }
 			function_call_parameter_list
 			')' { zend_do_end_function_call($4.u.op.opline_num?NULL:&$3, &$$, &$6, $4.u.op.opline_num, $4.u.op.opline_num TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);}
 	|	class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects '(' { zend_do_end_variable_parse(&$3, 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); }
+	|	variable_class_name T_PAAMAYIM_NEKUDOTAYIM variable_name '(' { 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(&$3, BP_VAR_R, 0 TSRMLS_CC); zend_do_begin_class_member_function_call(&$1, &$3 TSRMLS_CC); }
 
PHP Copyright © 2001-2025 The PHP Group
All rights reserved.
Last updated: Tue Apr 29 22:01:26 2025 UTC