private function handleValueMethod(Generator\ClassGenerator $generator, PHPProperty $prop, PHPClass $class, $all = true)
{
$type = $prop->getType();
$docblock = new DocBlockGenerator('Construct');
$paramTag = new ParamTag("value", "mixed");
$paramTag->setTypes($type ? $this->getPhpType($type) : "mixed");
$docblock->setTag($paramTag);
$param = new ParameterGenerator("value");
if ($type && !$this->isNativeType($type)) {
$param->setType($this->getPhpType($type));
}
$method = new MethodGenerator("__construct", [$param]);
$method->setDocBlock($docblock);
$method->setBody("\$this->value(\$value);");
$generator->addMethodFromGenerator($method);
$docblock = new DocBlockGenerator('Gets or sets the inner value');
$paramTag = new ParamTag("value", "mixed");
if ($type && $type instanceof PHPClassOf) {
$paramTag->setTypes($this->getPhpType($type->getArg()->getType()) . "[]");
} elseif ($type) {
$paramTag->setTypes($this->getPhpType($prop->getType()));
}
$docblock->setTag($paramTag);
$returnTag = new ReturnTag("mixed");
if ($type && $type instanceof PHPClassOf) {
$returnTag->setTypes($this->getPhpType($type->getArg()->getType()) . "[]");
} elseif ($type) {
$returnTag->setTypes($this->getPhpType($type));
}
$docblock->setTag($returnTag);
$param = new ParameterGenerator("value");
$param->setDefaultValue(null);
if ($type && !$this->isNativeType($type)) {
$param->setType($this->getPhpType($type));
}
$method = new MethodGenerator("value", []);
$method->setDocBlock($docblock);
$methodBody = "if (\$args = func_get_args()) {" . PHP_EOL;
$methodBody .= " \$this->" . $prop->getName() . " = \$args[0];" . PHP_EOL;
$methodBody .= "}" . PHP_EOL;
$methodBody .= "return \$this->" . $prop->getName() . ";" . PHP_EOL;
$method->setBody($methodBody);
$generator->addMethodFromGenerator($method);
$docblock = new DocBlockGenerator('Gets a string value');
$docblock->setTag(new ReturnTag("string"));
$method = new MethodGenerator("__toString");
$method->setDocBlock($docblock);
$method->setBody("return strval(\$this->" . $prop->getName() . ");");
$generator->addMethodFromGenerator($method);
}