Skip to content

getModifierNames() not reporting asymmetric visibility #19691

@dalguete

Description

@dalguete

Description

The following code:

<?php

class Testing
{
	public string $ok_public;
	protected string $ok_protected;
	private string $ok_private;

	public protected(set) string $wrong_public_protected_set;
	public private(set) string $wrong_public_private_set;
	protected private(set) string $wrong_protected_private_set;
}

$r = new ReflectionClass('Testing');
foreach($r->getProperties() as $rp) {
	echo $rp->getName() . ": ";
	echo $rp->getModifiers() . ": ";
	echo implode(", ", Reflection::getModifierNames($rp->getModifiers())) . "\n";
}

Resulted in this output:

ok_public: 1: public
ok_protected: 2: protected
ok_private: 4: private
wrong_public_protected_set: 2049: public
wrong_public_private_set: 4129: final, public
wrong_protected_private_set: 4130: final, protected

But I expected this output instead:

ok_public: 1: public
ok_protected: 2: protected
ok_private: 4: private
wrong_public_protected_set: 2049: public, protected_set
wrong_public_private_set: 4129: final, public, private_set
wrong_protected_private_set: 4130: final, protected, private_set

Link to run it online: https://3v4l.org/2VF1L

PHP Version

PHP Version => 8.4.10

System => Linux ip-172-31-29-183.eu-central-1.compute.internal 5.10.214-202.855.amzn2.x86_64 #1 SMP Tue Apr 9 06:57:12 UTC 2024 x86_64
Build Date => Jul 13 2025 00:21:23

Operating System

No response

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions