1
0
mirror of https://github.com/danog/PHP-Parser.git synced 2024-11-30 04:19:30 +01:00

Add getProperty to ClassLike

This commit is contained in:
Ruud Kamphuis 2019-12-27 16:16:17 +01:00 committed by Nikita Popov
parent f56d90d4f8
commit 64f4d5b619
2 changed files with 45 additions and 0 deletions

View File

@ -53,6 +53,26 @@ abstract class ClassLike extends Node\Stmt
return $properties; return $properties;
} }
/**
* Gets property with the given name defined directly in this class/interface/trait.
*
* @param string $name Name of the property
*
* @return Property|null Property node or null if the property does not exist
*/
public function getProperty(string $name) {
foreach ($this->stmts as $stmt) {
if ($stmt instanceof Property) {
foreach ($stmt->props as $prop) {
if ($prop instanceof PropertyProperty && $name === $prop->name->toString()) {
return $stmt;
}
}
}
}
return null;
}
/** /**
* Gets all methods defined directly in this class/interface/trait * Gets all methods defined directly in this class/interface/trait
* *

View File

@ -94,6 +94,31 @@ class ClassTest extends \PHPUnit\Framework\TestCase
$this->assertSame($properties, $class->getProperties()); $this->assertSame($properties, $class->getProperties());
} }
public function testGetProperty() {
$properties = [
$fooProp = new Property(Class_::MODIFIER_PUBLIC, [new PropertyProperty('foo1')]),
$barProp = new Property(Class_::MODIFIER_PUBLIC, [new PropertyProperty('BAR1')]),
$fooBarProp = new Property(Class_::MODIFIER_PUBLIC, [new PropertyProperty('foo2'), new PropertyProperty('bar2')]),
];
$class = new Class_('Foo', [
'stmts' => [
new TraitUse([]),
$properties[0],
new ClassConst([]),
$properties[1],
new ClassMethod('fooBar'),
$properties[2],
]
]);
$this->assertSame($fooProp, $class->getProperty('foo1'));
$this->assertSame($barProp, $class->getProperty('BAR1'));
$this->assertSame($fooBarProp, $class->getProperty('foo2'));
$this->assertSame($fooBarProp, $class->getProperty('bar2'));
$this->assertNull($class->getProperty('bar1'));
$this->assertNull($class->getProperty('nonExisting'));
}
public function testGetMethod() { public function testGetMethod() {
$methodConstruct = new ClassMethod('__CONSTRUCT'); $methodConstruct = new ClassMethod('__CONSTRUCT');
$methodTest = new ClassMethod('test'); $methodTest = new ClassMethod('test');