Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

ReflectionAttribute: IS_INSTANCEOF and getTarget()

34 views
Skip to first unread message

alex

unread,
Oct 26, 2023, 4:10:07 AM10/26/23
to

Olen mitte keegi

unread,
Nov 12, 2023, 12:13:00 PM11/12/23
to
Interested ordering a webpage or in web programming services ?

veebiprogrammeerimisteenused.medianewsonline.com


J.O. Aho

unread,
Nov 13, 2023, 1:59:23 AM11/13/23
to
On 26/10/2023 10.09, alex wrote:

Just my guesses as the documentation is a bit thin at the moment

> https://www.php.net/manual/en/reflectionattribute.gettarget.php

There are a number of attributes you can give a class, TARGET_* and you
will get the sum of all those targets as an unified bit value. 0 if none
of the TARGET_* are set.


> https://www.php.net/manual/en/class.reflectionattribute.php#reflectionattribute.constants.is-instanceof

this will give you something like typeof for the instance in question.

--
//Aho

alex

unread,
Nov 13, 2023, 6:50:31 AM11/13/23
to
Il 13/11/23 07:54, J.O. Aho ha scritto:
>> https://www.php.net/manual/en/reflectionattribute.gettarget.php
>
> There are a number of attributes you can give a class, TARGET_* and you
> will get the sum of all those targets as an unified bit value. 0 if none
> of the TARGET_* are set.

mmmhhh...

Are you sure?
An example? (here's mine below)

~$ cat /tmp/aaa
<?php

#[ATTRIB]
class TARGET_CLASS {

#[ATTRIB]
function TARGET_METHOD() {}

}

#[ATTRIB]
function TARGET_FUNCTION() {}

function TARGET_xxx() {}

$reflections = [
new ReflectionClass('TARGET_CLASS'),
new ReflectionMethod('TARGET_CLASS::TARGET_METHOD'),
new ReflectionFunction('TARGET_FUNCTION'),
new ReflectionFunction('TARGET_xxx'),
];

foreach ($reflections as $reflection) {
echo $reflection->getName() . ': ';
echo $reflection->getAttributes()[0]->getTarget() || "IS ZERO";
echo PHP_EOL;
}
~$ php /tmp/aaa
TARGET_CLASS: 1
TARGET_METHOD: 1
TARGET_FUNCTION: 1
TARGET_xxx: PHP Warning: Undefined array key 0 in /tmp/aaa on line 25
PHP Fatal error: Uncaught Error: Call to a member function getTarget()
on null in /tmp/aaa:25

REPEAT:
An example?

>> https://www.php.net/manual/en/class.reflectionattribute.php#reflectionattribute.constants.is-instanceof
>
> this will give you something like typeof for the instance in question.

typeof...???

https://www.google.com/search?channel=fs&client=ubuntu-sn&q=php+typeof#ip=1



J.O. Aho

unread,
Nov 13, 2023, 8:32:50 AM11/13/23
to
On 13/11/2023 12.50, alex wrote:
> Il 13/11/23 07:54, J.O. Aho ha scritto:
>>> https://www.php.net/manual/en/reflectionattribute.gettarget.php
>>
>> There are a number of attributes you can give a class, TARGET_* and
>> you will get the sum of all those targets as an unified bit value. 0
>> if none of the TARGET_* are set.
>
> mmmhhh...
>
> Are you sure?

No and yes, it wasn't really what I thought

I thought it would give the value of
#[Attribute(Attribute::TARGET_CLASS|Attribute::IS_REPEATABLE)] (65)

but it only gives you

Attribute::TARGET_CLASS (1)
Attribute::TARGET_FUNCTION (2)
Attribute::TARGET_METHOD (4)

see:
https://github.com/php/php-src/blob/cc2bf119519c8dd7d6afa2b63aa4ea8b014f205d/Zend/zend_attributes.h

You can see at the unitest:
https://github.com/php/php-src/blob/cc2bf119519c8dd7d6afa2b63aa4ea8b014f205d/Zend/tests/attributes/020_userland_attribute_validation.phpt


>>> https://www.php.net/manual/en/class.reflectionattribute.php#reflectionattribute.constants.is-instanceof
>>
>> this will give you something like typeof for the instance in question.
>
> typeof...???

just ignore this part.. typeof used in other languages when you want to
know what type something is of and I was hasty in my reply and guessed
without really reading.

--
//Aho
0 new messages