]> granicus.if.org Git - php/commitdiff
- MFH Prevent instantiation from Reflection
authorMarcus Boerger <helly@php.net>
Sat, 3 Jan 2009 19:29:55 +0000 (19:29 +0000)
committerMarcus Boerger <helly@php.net>
Sat, 3 Jan 2009 19:29:55 +0000 (19:29 +0000)
Zend/zend_closures.c

index f646550cbdd482a5654e0e0ebea1699142be12f2..03a0e8516f56cdf833a0ceb05408f4d3ff99d3e7 100644 (file)
@@ -310,11 +310,24 @@ static HashTable *zend_closure_get_debug_info(zval *object, int *is_temp TSRMLS_
 }
 /* }}} */
 
+/* {{{ proto Closure::__construct()
+   Private constructor preventing instantiation */
+ZEND_METHOD(Closure, __construct)
+{
+       zend_error(E_RECOVERABLE_ERROR, "Instantiation of 'Closure' is not allowed");
+}
+/* }}} */
+
+static const zend_function_entry closure_functions[] = {
+       ZEND_ME(Closure, __construct, NULL, ZEND_ACC_PRIVATE)
+       {NULL, NULL, NULL}
+};
+
 void zend_register_closure_ce(TSRMLS_D) /* {{{ */
 {
        zend_class_entry ce;
 
-       INIT_CLASS_ENTRY(ce, "Closure", NULL);
+       INIT_CLASS_ENTRY(ce, "Closure", closure_functions);
        zend_ce_closure = zend_register_internal_class(&ce TSRMLS_CC);
        zend_ce_closure->ce_flags |= ZEND_ACC_FINAL_CLASS;
        zend_ce_closure->create_object = zend_closure_new;