or (new Foo)-> // just some example of that path $foo = new Foo; $foo->return_bar()->return_foo()->return_bar()-> // @var $foo Foo $foo->return_bar()->return_foo()->return_bar()-> function fun(Foo $foo) { $foo->return_bar()->return_foo()->return_bar()-> } $foo->bar-> $foo->bar2-> $foo->bar3-> $foo->bar3->foo-> // ---- $doc = new DOMDocument; $doc->createAttribute()->ownerElement-> $d = new DateTime; $d->add()->getTimezone()-> // ---- $tz = DateTime::createFromFormat()->getTimezone(); $tz-> // --- $foobar = Foo::$static_bar2->return_foo(); $foobar-> // ---- $foo2 = new Foo; $bar2 = $foo2->return_bar(); $bar2-> $foo3 = new Foo; $bar3 = $foo3->return_bar(); $bar3->return_foo()-> // -- class SimilarNames { /** * return_self * * @return self */ public function return_self() { } /** * return_ * * @return Foo */ public function return_() { } } $foo3 = new SimilarNames; $foo3->return_self()->return_()-> // ---- /** * CommentedFoo * * @property DateTime $docBlockProperty */ class CommentedFoo { } $commentedFoo = new CommentedFoo; $commentedFoo->docBlockProperty->