> Would it make sense to not only add this for ReflectionAttribute, but
also Function and/or others?

There may be case where this makes sense but not necessarily in the use
case that i explain, and don't want to add more to this proposal, it's also
missing in ReflectionParameter, ReflectionProperty and certainly many
others if we go on this path then there is a lot of changes to apply and
will induce more friction for this proposal, i prefer to add small parts so
we don't deviate from the original use case.

> Do you have an example of how you expect this to be used?  I'm having a
hard time understanding how I'd leverage this.  (I maintain an attribute
enhancement library, Crell/AttributeUtils, so I've hit a lot of edge cases
in attribute design.)

Sure, let's say we have the following class

#[CustomAttribute(foo: 'foo')
#[CustomAttribute(foo: 'foo')
class Entity {}

And that later i have something that read those attributes, but i want to
throw an Exception when multiple attribute defined the same value for the
foo property (as it should be unique in my use case), i would not be able
to do that in the constructor since i don't have the context of others
attributes in this case, so i want to throw a custom exception explaining
it's caused by the attribute "CustomAttribute" in the file "Entity.php" at
line 4, as there is the same value in the file "Entity.php" at line 3

If I throw an exception without this message the error will pinpoint to
where I threw the exception and it may be confusing for the end user, by
having this he will know where to look and what to modify to make its code
correct.

> I would propose negating and renaming isUserDefined() to isInternal()

Both methods exists depending the context (there is a isUserDefined() in
the ReflectionClass class), but i'm fine with negating this if it's more
consistent

> As hinted in the PR, I believe the implementation is wrong,

I think the implementation is correct, i answered in the PR, i will add
more tests case that explain what is wanted here

> I'm also wondering whether it may be more useful to expose the attribute
class as getClass()

Do we not already have this with the getName() method ? or it can be wrong
if it's an alias by example ?

Joël

Reply via email to