Skip to content

Class name matching

Satoshi Kawashima edited this page May 6, 2019 · 3 revisions

In this case

<?php
namespace {
    class Hoge {}
}

namespace Hoge {
    class SomeClass1 {}
    class SomeClass2 {}
}

namespace Hoge\Fuga {
    class SomeClass3 {}
    class SomeClass4 {}
}

['\Hoge'] will only match Hoge.

['\Hoge\\'] will match Hoge\SomeClass1, Hoge\SomeClass2, Hoge\Fuga\SomeClass3, Hoge\Fuga\SomeClass4. (\\ is measure escape string)

['\Hoge', '\Hoge\\'] will match all classes.

['\Hoge\\', '!\Hoge\Fuga\SomeClass3'] will match Hoge\SomeClass1, Hoge\SomeClass2, Hoge\Fuga\SomeClass4.

['\Hoge\\', '!\Hoge\Fuga\\'] will match Hoge\SomeClass1, Hoge\SomeClass2.

['\\'] will match all classes.

['\\', '!\Hoge\SomeClass1'] will match Hoge, Hoge\SomeClass2, Hoge\Fuga\SomeClass3, Hoge\Fuga\SomeClass4.

['!\Hoge\SomeClass1'] will match Hoge, Hoge\SomeClass2, Hoge\Fuga\SomeClass3, Hoge\Fuga\SomeClass4.

About FQSEN

FQSEN(Fully Qualified Structural Element Name) is notation to identify class/interface/trait members. It is introduced in PSR-5. FQSEN must start with \. However, as a original extension in this library, the namespace ends with \. Because, it is impossible to distinguish the difference between namespace and class.

FQSEN has the following ABNF definition.

FQSEN    = fqnn / fqcn / constant / method / property  / function
fqnn     = "\" [name] *("\" [name])
fqcn     = fqnn "\" name
constant = (fqnn "\" / fqcn "::") name
method   = fqcn "::" name "()"
property = fqcn "::$" name
function = fqnn "\" name "()"
name     = (ALPHA / "_") *(ALPHA / DIGIT / "_")
Clone this wiki locally