-
Notifications
You must be signed in to change notification settings - Fork 814
Expand file tree
/
Copy pathInjectable.php
More file actions
50 lines (46 loc) · 1.6 KB
/
Copy pathInjectable.php
File metadata and controls
50 lines (46 loc) · 1.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<?php
namespace SilverStripe\Core\Injector;
/**
* A class that can be instantiated or replaced via DI
*/
trait Injectable
{
/**
* 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);
* $list = SiteTree::get();
*
* @param mixed $args
* @return static
*/
public static function create(...$args)
{
// Class to create should be the calling class
$class = get_called_class();
return Injector::inst()->createWithArgs($class, $args);
}
/**
* 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);
}
}