<?php 
 
/* 
 Copyright (c) 2009 hamcrest.org 
 */ 
 
class FactoryParameter 
{ 
    /** 
     * @var FactoryMethod 
     */ 
    private $method; 
 
    /** 
     * @var ReflectionParameter 
     */ 
    private $reflector; 
 
    public function __construct(FactoryMethod $method, ReflectionParameter $reflector) 
    { 
        $this->method = $method; 
        $this->reflector = $reflector; 
    } 
 
    public function getDeclaration() 
    { 
        if ($this->reflector->isArray()) { 
            $code = 'array '; 
        } else { 
            $class = $this->reflector->getClass(); 
            if ($class !== null) { 
                $code = '\\' . $class->name . ' '; 
            } else { 
                $code = ''; 
            } 
        } 
        $code .= '$' . $this->reflector->name; 
        if ($this->reflector->isOptional()) { 
            $default = $this->reflector->getDefaultValue(); 
            if (is_null($default)) { 
                $default = 'null'; 
            } elseif (is_bool($default)) { 
                $default = $default ? 'true' : 'false'; 
            } elseif (is_string($default)) { 
                $default = "'" . $default . "'"; 
            } elseif (is_numeric($default)) { 
                $default = strval($default); 
            } elseif (is_array($default)) { 
                $default = 'array()'; 
            } else { 
                echo 'Warning: unknown default type for ' . $this->getMethod()->getFullName() . PHP_EOL; 
                var_dump($default); 
                $default = 'null'; 
            } 
            $code .= ' = ' . $default; 
        } 
        return $code; 
    } 
 
    public function getInvocation() 
    { 
        return '$' . $this->reflector->name; 
    } 
 
    public function getMethod() 
    { 
        return $this->method; 
    } 
} 
 
 |