Edit report at https://bugs.php.net/bug.php?id=55559&edit=1

 ID:                 55559
 Comment by:         no at mailinator dot com
 Reported by:        info at strictcoding dot co dot uk
 Summary:            ReflectionClass::getProperties() wrongly returns
                     static properties
 Status:             Not a bug
 Type:               Bug
 Package:            Reflection related
 Operating System:   Fedora 15
 PHP Version:        5.3SVN-2011-08-31 (SVN)
 Block user comment: N
 Private report:     N

 New Comment:

uh, no, this *is* a bug. those flags are being logically OR'd with each other 
and are supposed to act as *filters*. consider the following:

i want to find a file with permissions "------rw-" (read/write access for 
public 
only). lets say i have these flags to work with:

OWNER_READ
OWNER_WRITE
OWNER_EXECUTE
GROUP_READ
GROUP_WRITE
GROUP_EXECUTE
PUBLIC_READ
PUBLIC_WRITE
PUBLIC_EXECUTE

i should only have to specify (PUBLIC_READ | PUBLIC_WRITE) to match "------rw-" 
*exactly*. well, according to you, owner and group members also belong to the 
public, so they should be implicitly included, and the search will match "rw-rw-
rw". what?

this is a bug.


Previous Comments:
------------------------------------------------------------------------
[2011-09-15 15:54:34] il...@php.net

Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php

The purpose would be to allow you to retrieve only the static properties, no 
bug 
here.

------------------------------------------------------------------------
[2011-08-31 23:40:55] info at strictcoding dot co dot uk

I can see your point, however what would be the purpose of IS_STATIC then?
The whole point of the filter parameter, IMO, is to ask for a property which 
either IS_PUBLIC, or IS_PUBLIC *and* IS_STATIC.

------------------------------------------------------------------------
[2011-08-31 22:28:57] johan...@php.net

A static property is also a public property. I can see where you are coming 
from but I'm not sure I want to follow the logic. Maybe we'd need "negative" 
filters, while this makes it quite complex so I'd then again prefer filtering 
it from the outside.

As then you really have all the freedom.

   $non_private_properties = array_filter($r->getProperties(), function ($p) { 
return !$p->isPublic(); });

------------------------------------------------------------------------
[2011-08-31 22:14:27] info at strictcoding dot co dot uk

Description:
------------
When used without ReflectionProperty::IS_STATIC, 
ReflectionClass::getProperties() 
still returns static properties.

Test script:
---------------
class A {
    public static $x;
}

$r = new ReflectionClass('A');
print_r($r->getProperties(ReflectionProperty::IS_PUBLIC));

Expected result:
----------------
Array
(
)

Actual result:
--------------
Array
(
    [0] => ReflectionProperty Object
        (
            [name] => x
            [class] => A
        )

)


------------------------------------------------------------------------



-- 
Edit this bug report at https://bugs.php.net/bug.php?id=55559&edit=1

Reply via email to