1
0
mirror of https://github.com/php/php-src.git synced 2026-03-26 17:22:15 +01:00
Files
archived-php-src/ext/reflection/tests/ReflectionClassConstant_basic1.phpt
Dmitry Stogov a75c195000 Implemented the RFC Support Class Constant Visibility.
Squashed commit of the following:

commit f11ca0e7a5
Author: Dmitry Stogov <dmitry@zend.com>
Date:   Tue Dec 8 12:38:42 2015 +0300

    Fixed test expectation

commit 211f873f54
Author: Dmitry Stogov <dmitry@zend.com>
Date:   Tue Dec 8 12:28:38 2015 +0300

    Embed zend_class_constant.flags into zend_class_constants.value.u2.access_flags

commit 51deab84b2
Author: Dmitry Stogov <dmitry@zend.com>
Date:   Mon Dec 7 11:18:55 2015 +0300

    Fixed issues found by Nikita

commit 544dbd5b47
Author: Dmitry Stogov <dmitry@zend.com>
Date:   Sat Dec 5 02:41:05 2015 +0300

    Refactored immplementation of https://wiki.php.net/rfc/class_const_visibility
    @reeze created an RFC here and I emailed internals here and didn't get any responses positive/negative.
2015-12-08 12:40:42 +03:00

195 lines
4.4 KiB
PHP

--TEST--
Test usage of ReflectionClassConstant methods __toString(), export(), getName(), getValue(), isPublic(), isPrivate(), isProtected(), getModifiers(), getDeclaringClass() and getDocComment().
--FILE--
<?php
function reflectClassConstant($base, $constant) {
$constInfo = new ReflectionClassConstant($base, $constant);
echo "**********************************\n";
$class = is_object($base) ? get_class($base) : $base;
echo "Reflecting on class constant $class::$constant\n\n";
echo "__toString():\n";
var_dump($constInfo->__toString());
echo "export():\n";
var_dump(ReflectionClassConstant::export($base, $constant, true));
echo "export():\n";
var_dump(ReflectionClassConstant::export($base, $constant, false));
echo "getName():\n";
var_dump($constInfo->getName());
echo "getValue():\n";
var_dump($constInfo->getValue());
echo "isPublic():\n";
var_dump($constInfo->isPublic());
echo "isPrivate():\n";
var_dump($constInfo->isPrivate());
echo "isProtected():\n";
var_dump($constInfo->isProtected());
echo "getModifiers():\n";
var_dump($constInfo->getModifiers());
echo "getDeclaringClass():\n";
var_dump($constInfo->getDeclaringClass());
echo "getDocComment():\n";
var_dump($constInfo->getDocComment());
echo "\n**********************************\n";
}
class TestClass {
public const /** My Doc comment */ PUB = true;
/** Another doc comment */
protected const PROT = 4;
private const PRIV = "keepOut";
}
$instance = new TestClass();
reflectClassConstant("TestClass", "PUB");
reflectClassConstant("TestClass", "PROT");
reflectClassConstant("TestClass", "PRIV");
reflectClassConstant($instance, "PRIV");
reflectClassConstant($instance, "BAD_CONST");
?>
--EXPECTF--
**********************************
Reflecting on class constant TestClass::PUB
__toString():
string(42) " Constant [ public boolean PUB ] { 1 }
"
export():
string(42) " Constant [ public boolean PUB ] { 1 }
"
export():
Constant [ public boolean PUB ] { 1 }
NULL
getName():
string(3) "PUB"
getValue():
bool(true)
isPublic():
bool(true)
isPrivate():
bool(false)
isProtected():
bool(false)
getModifiers():
int(256)
getDeclaringClass():
object(ReflectionClass)#3 (1) {
["name"]=>
string(9) "TestClass"
}
getDocComment():
string(21) "/** My Doc comment */"
**********************************
**********************************
Reflecting on class constant TestClass::PROT
__toString():
string(46) " Constant [ protected integer PROT ] { 4 }
"
export():
string(46) " Constant [ protected integer PROT ] { 4 }
"
export():
Constant [ protected integer PROT ] { 4 }
NULL
getName():
string(4) "PROT"
getValue():
int(4)
isPublic():
bool(false)
isPrivate():
bool(false)
isProtected():
bool(true)
getModifiers():
int(512)
getDeclaringClass():
object(ReflectionClass)#3 (1) {
["name"]=>
string(9) "TestClass"
}
getDocComment():
string(26) "/** Another doc comment */"
**********************************
**********************************
Reflecting on class constant TestClass::PRIV
__toString():
string(49) " Constant [ private string PRIV ] { keepOut }
"
export():
string(49) " Constant [ private string PRIV ] { keepOut }
"
export():
Constant [ private string PRIV ] { keepOut }
NULL
getName():
string(4) "PRIV"
getValue():
string(7) "keepOut"
isPublic():
bool(false)
isPrivate():
bool(true)
isProtected():
bool(false)
getModifiers():
int(1024)
getDeclaringClass():
object(ReflectionClass)#3 (1) {
["name"]=>
string(9) "TestClass"
}
getDocComment():
bool(false)
**********************************
**********************************
Reflecting on class constant TestClass::PRIV
__toString():
string(49) " Constant [ private string PRIV ] { keepOut }
"
export():
string(49) " Constant [ private string PRIV ] { keepOut }
"
export():
Constant [ private string PRIV ] { keepOut }
NULL
getName():
string(4) "PRIV"
getValue():
string(7) "keepOut"
isPublic():
bool(false)
isPrivate():
bool(true)
isProtected():
bool(false)
getModifiers():
int(1024)
getDeclaringClass():
object(ReflectionClass)#3 (1) {
["name"]=>
string(9) "TestClass"
}
getDocComment():
bool(false)
**********************************
Fatal error: Uncaught ReflectionException: Class Constant TestClass::BAD_CONST does not exist in %s:%d
Stack trace:
#0 %s(%d): ReflectionClassConstant->__construct(Object(TestClass), 'BAD_CONST')
#1 %s(%d): reflectClassConstant(Object(TestClass), 'BAD_CONST')
#2 {main}
thrown in %s on line %d