silverstripe-framework/src/Core/Injector/Injectable.php

51 lines
1.6 KiB
PHP
Raw Normal View History

<?php
namespace SilverStripe\Core\Injector;
/**
* A class that can be instantiated or replaced via DI
*/
2016-11-29 00:31:16 +01:00
trait Injectable
{
2016-11-29 00:31:16 +01:00
/**
* An implementation of the factory method, allows you to create an instance of a class
*
* This method will defer class substitution to the Injector API, which can be customised
* via the Config API to declare substitution classes.
*
* This can be called in one of two ways - either calling via the class directly,
* or calling on Object and passing the class name as the first parameter. The following
* are equivalent:
* $list = DataList::create(SiteTree::class);
2016-11-29 00:31:16 +01:00
* $list = SiteTree::get();
*
* @param mixed $args
2016-11-29 00:31:16 +01:00
* @return static
*/
public static function create(...$args)
2016-11-29 00:31:16 +01:00
{
// Class to create should be the calling class
2016-11-29 00:31:16 +01:00
$class = get_called_class();
return Injector::inst()->createWithArgs($class, $args);
}
2016-11-29 00:31:16 +01:00
/**
* Creates a class instance by the "singleton" design pattern.
* It will always return the same instance for this class,
* which can be used for performance reasons and as a simple
* way to access instance methods which don't rely on instance
* data (e.g. the custom SilverStripe static handling).
*
* @param string $class Optional classname to create, if the called class should not be used
* @return static The singleton instance
*/
public static function singleton($class = null)
{
if (!$class) {
$class = get_called_class();
}
return Injector::inst()->get($class);
}
}