<?php /** * Zend Framework (http://framework.zend.com/) * * @link http://github.com/zendframework/zf2 for the canonical source repository * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */ namespace Zend\Di\Definition\Builder; /** * Object containing definitions for a single class */ class PhpClass { /** * @var string */ protected $defaultMethodBuilder = 'Zend\Di\Definition\Builder\InjectionMethod'; /** * @var null|string */ protected $name = null; /** * @var string|\Callable|array */ protected $instantiator = '__construct'; /** * @var InjectionMethod[] */ protected $injectionMethods = array(); /** * @var array */ protected $superTypes = array(); /** * Set name * * @param string $name * @return PhpClass */ public function setName($name) { $this->name = $name; return $this; } /** * Get name * * @return string */ public function getName() { return $this->name; } /** * @param string|\Callable|array $instantiator * @return PhpClass */ public function setInstantiator($instantiator) { $this->instantiator = $instantiator; return $this; } /** * @return array|\Callable|string */ public function getInstantiator() { return $this->instantiator; } /** * @param string $superType * @return PhpClass */ public function addSuperType($superType) { $this->superTypes[] = $superType; return $this; } /** * Get super types * * @return array */ public function getSuperTypes() { return $this->superTypes; } /** * Add injection method * * @param InjectionMethod $injectionMethod * @return PhpClass */ public function addInjectionMethod(InjectionMethod $injectionMethod) { $this->injectionMethods[] = $injectionMethod; return $this; } /** * Create and register an injection method * * Optionally takes the method name. * * This method may be used in lieu of addInjectionMethod() in * order to provide a more fluent interface for building classes with * injection methods. * * @param null|string $name * @return InjectionMethod */ public function createInjectionMethod($name = null) { $builder = $this->defaultMethodBuilder; /* @var $method InjectionMethod */ $method = new $builder(); if (null !== $name) { $method->setName($name); } $this->addInjectionMethod($method); return $method; } /** * Override which class will be used by {@link createInjectionMethod()} * * @param string $class * @return PhpClass */ public function setMethodBuilder($class) { $this->defaultMethodBuilder = $class; return $this; } /** * Determine what class will be used by {@link createInjectionMethod()} * * Mainly to provide the ability to temporarily override the class used. * * @return string */ public function getMethodBuilder() { return $this->defaultMethodBuilder; } /** * @return InjectionMethod[] */ public function getInjectionMethods() { return $this->injectionMethods; } }