php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Return to Bug #55490
Patch ReflectionClass_newInstanceWithoutConstructor revision 2011-08-25 13:26 UTC by sebastian@php.net
revision 2011-08-25 09:39 UTC by sebastian@php.net
revision 2011-08-25 09:27 UTC by sebastian@php.net
revision 2011-08-25 09:24 UTC by sebastian@php.net

Patch ReflectionClass_newInstanceWithoutConstructor for Reflection related Bug #55490

Patch version 2011-08-25 13:26 UTC

Return to Bug #55490 | Download this patch
This patch renders other patches obsolete

Obsolete patches:

Patch Revisions: 2011-08-25 13:26 UTC | 2011-08-25 09:39 UTC | 2011-08-25 09:27 UTC | 2011-08-25 09:24 UTC

Developer: sebastian@php.net


 Index: ext/reflection/tests/ReflectionClass_newInstanceWithoutConstructor.phpt
 ===================================================================
 --- ext/reflection/tests/ReflectionClass_newInstanceWithoutConstructor.phpt	(revision 0)
 +++ ext/reflection/tests/ReflectionClass_newInstanceWithoutConstructor.phpt	(revision 0)
 @@ -0,0 +1,33 @@
 +--TEST--
 +ReflectionClass::newInstanceWithoutConstructor()
 +--CREDITS--
 +Sebastian Bergmann <sebastian@php.net>
 +--FILE--
 +<?php
 +class Foo
 +{
 +    public function __construct()
 +    {
 +        print __METHOD__;
 +    }
 +}
 +
 +$class = new ReflectionClass('Foo');
 +var_dump($class->newInstanceWithoutConstructor());
 +
 +$class = new ReflectionClass('StdClass');
 +var_dump($class->newInstanceWithoutConstructor());
 +
 +$class = new ReflectionClass('DateTime');
 +var_dump($class->newInstanceWithoutConstructor());
 +--EXPECTF--
 +object(Foo)#%d (0) {
 +}
 +object(stdClass)#%d (0) {
 +}
 +
 +Fatal error: Uncaught exception 'ReflectionException' with message 'Class DateTime is an internal class that cannot be instantiated without invoking its constructor' in %s/tests/ReflectionClass_newInstanceWithoutConstructor.php:%d
 +Stack trace:
 +#0 %s/ReflectionClass_newInstanceWithoutConstructor.php(%d): ReflectionClass->newInstanceWithoutConstructor()
 +#1 {main}
 +  thrown in %s/ReflectionClass_newInstanceWithoutConstructor.php on line %d
 
 Property changes on: ext/reflection/tests/ReflectionClass_newInstanceWithoutConstructor.phpt
 ___________________________________________________________________
 Added: svn:keywords
    + Id Rev Revision
 Added: svn:eol-style
    + native
 
  Index: ext/reflection/tests/ReflectionClass_toString_001.phpt
  ===================================================================
  --- ext/reflection/tests/ReflectionClass_toString_001.phpt	(revision 315465)
  +++ ext/reflection/tests/ReflectionClass_toString_001.phpt	(working copy)


  Index: ext/reflection/php_reflection.c
  ===================================================================
  --- ext/reflection/php_reflection.c	(revision 315465)
  +++ ext/reflection/php_reflection.c	(working copy)
 @@ -4129,6 +4129,21 @@
 @@ -4129,6 +4129,25 @@
   }
   /* }}} */
   
  +/* {{{ proto public stdclass ReflectionClass::newInstanceWithoutConstructor()


  +	zend_class_entry *ce;
  +
  +	METHOD_NOTSTATIC(reflection_class_ptr);
  +	GET_REFLECTION_OBJECT_PTR(ce);
 +
 +	if (ce->create_object != NULL) {
 +		zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC, "Class %s is an internal class that cannot be instantiated without invoking its constructor", ce->name);
 +	}
  +
  +	object_init_ex(return_value, ce);
  +}
  +/* }}} */
  +
   /* {{{ proto public stdclass ReflectionClass::newInstanceArgs([array args])
      Returns an instance of this class */
   ZEND_METHOD(reflection_class, newInstanceArgs)
 @@ -5694,6 +5709,9 @@
 @@ -5694,6 +5713,9 @@
   	ZEND_ARG_INFO(0, args)
   ZEND_END_ARG_INFO()
   
  +ZEND_BEGIN_ARG_INFO(arginfo_reflection_class_newInstanceWithoutConstructor, 0)


  +
   ZEND_BEGIN_ARG_INFO_EX(arginfo_reflection_class_newInstanceArgs, 0, 0, 0)
   	ZEND_ARG_ARRAY_INFO(0, args, 0)
   ZEND_END_ARG_INFO()
 @@ -5742,6 +5760,7 @@
 @@ -5742,6 +5764,7 @@
   	ZEND_ME(reflection_class, getModifiers, arginfo_reflection__void, 0)
   	ZEND_ME(reflection_class, isInstance, arginfo_reflection_class_isInstance, 0)
   	ZEND_ME(reflection_class, newInstance, arginfo_reflection_class_newInstance, 0)
  +	ZEND_ME(reflection_class, newInstanceWithoutConstructor, arginfo_reflection_class_newInstanceWithoutConstructor, 0)
 
PHP Copyright © 2001-2014 The PHP Group
All rights reserved.
Last updated: Sat Apr 19 06:02:27 2014 UTC