*/ public static function getClassLikeNames() : array { return ['Ns\Foo']; } /** * @return ?bool */ public static function doesPropertyExist( string $fq_classlike_name, string $property_name, bool $read_mode, StatementsSource $source = null, Context $context = null, CodeLocation $code_location = null ) { return $property_name === 'magic_property'; } /** * @return ?bool */ public static function isPropertyVisible( StatementsSource $source, string $fq_classlike_name, string $property_name, bool $read_mode, Context $context = null, CodeLocation $code_location = null ) { return true; } /** * @param array $call_args * @return ?Type\Union */ public static function getPropertyType( string $fq_classlike_name, string $property_name, bool $read_mode, StatementsSource $source = null, Context $context = null ) { return Type::getString(); } }