Doc #76117 [Fbk->Asn]: uopz flags is NOT for classes, but methods
| From: | Andy_Schmidt at HM-Software dot com | Date: | Tue, 20 Mar 2018 15:18:18 +0000 |
| Subject: | Doc #76117 [Fbk->Asn]: uopz flags is NOT for classes, but methods | ||
| References: | 1 | Groups: | php.doc.bugs |
| Request: | Send a blank email to doc-bugs+get-15543@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=76117&edit=1
ID: 76117
User updated by: Andy_Schmidt at HM-Software dot com
Reported by: Andy_Schmidt at HM-Software dot com
Summary: uopz flags is NOT for classes, but methods
-Status: Feedback
+Status: Assigned
Type: Documentation Problem
Package: Documentation problem
Operating System: any
PHP Version: 7.2.3
Assigned To: cmb
Block user comment: N
Private report: N
New Comment:
Result:
PHP Fatal error: Uncaught InvalidArgumentException:
unexpected parameter combination,
expected (class, function, flags) or (function, flags)
Stack trace: #0: uopz_flags('MyClass', NULL, 0)
Previous Comments:
------------------------------------------------------------------------
[2018-03-20 12:36:37] cmb@php.net
Please try:
<?php
final class MyClass { function mymethod() {} };
var_dump( ( new ReflectionClass( 'MyClass') )->isFinal() );
uopz_flags(MyClass::class, null, 0);
var_dump( ( new ReflectionClass( 'MyClass') )->isFinal() );
This should print:
bool(true)
bool(false)
------------------------------------------------------------------------
[2018-03-20 04:03:49] Andy_Schmidt at HM-Software dot com
Description:
------------
---
From manual page: http://www.php.net/function.uopz-flags
---
The manual incorrectly states: "Get or set flags on function or class".
This implies to the reader that either the flags of a standalone function, or the flags of the class
itself (such as "final class {}") can be queried or manipulated.
In reality with version UOPZ 5.02 one can only reference a function or a class::method! One simply
cannot omit the function name (e.g., making it NULL, or '' - it can't even be
'__construct')
The correct text shoud read:
"Get or set flags on function or class method"
...
"Get or set the flags on a method or function entry at runtime"
...
function
The name of the function or method
Test script:
---------------
final class MyClass { function mymethod() {} };
var_dump( ( new ReflectionClass( 'MyClass') )->isFinal() );
if ( !defined( 'ZEND_ACC_FETCH' ) )
define( 'ZEND_ACC_FETCH', PHP_INT_MAX );
// Works:
var_dump( uopz_flags( 'MyClass', 'mymethod' , ZEND_ACC_FETCH ) );
// Fails:
var_dump( uopz_flags( 'MyClass', '' , ZEND_ACC_FETCH ) );
var_dump( uopz_flags( 'MyClass', NULL , ZEND_ACC_FETCH ) );
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=76117&edit=1