Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F5987860
Factory.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
Factory.php
View Options
<?php
declare
(
strict_types
=
1
);
/*
* This file is part of sebastian/comparator.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace
SebastianBergmann\Comparator
;
use
function
array_unshift
;
/**
* Factory for comparators which compare values for equality.
*/
class
Factory
{
/**
* @var Factory
*/
private
static
$instance
;
/**
* @var Comparator[]
*/
private
$customComparators
=
[];
/**
* @var Comparator[]
*/
private
$defaultComparators
=
[];
/**
* @return Factory
*/
public
static
function
getInstance
()
{
if
(
self
::
$instance
===
null
)
{
self
::
$instance
=
new
self
;
// @codeCoverageIgnore
}
return
self
::
$instance
;
}
/**
* Constructs a new factory.
*/
public
function
__construct
()
{
$this
->
registerDefaultComparators
();
}
/**
* Returns the correct comparator for comparing two values.
*
* @param mixed $expected The first value to compare
* @param mixed $actual The second value to compare
*
* @return Comparator
*/
public
function
getComparatorFor
(
$expected
,
$actual
)
{
foreach
(
$this
->
customComparators
as
$comparator
)
{
if
(
$comparator
->
accepts
(
$expected
,
$actual
))
{
return
$comparator
;
}
}
foreach
(
$this
->
defaultComparators
as
$comparator
)
{
if
(
$comparator
->
accepts
(
$expected
,
$actual
))
{
return
$comparator
;
}
}
throw
new
RuntimeException
(
'No suitable Comparator implementation found'
);
}
/**
* Registers a new comparator.
*
* This comparator will be returned by getComparatorFor() if its accept() method
* returns TRUE for the compared values. It has higher priority than the
* existing comparators, meaning that its accept() method will be invoked
* before those of the other comparators.
*
* @param Comparator $comparator The comparator to be registered
*/
public
function
register
(
Comparator
$comparator
)
/*: void*/
{
array_unshift
(
$this
->
customComparators
,
$comparator
);
$comparator
->
setFactory
(
$this
);
}
/**
* Unregisters a comparator.
*
* This comparator will no longer be considered by getComparatorFor().
*
* @param Comparator $comparator The comparator to be unregistered
*/
public
function
unregister
(
Comparator
$comparator
)
/*: void*/
{
foreach
(
$this
->
customComparators
as
$key
=>
$_comparator
)
{
if
(
$comparator
===
$_comparator
)
{
unset
(
$this
->
customComparators
[
$key
]);
}
}
}
/**
* Unregisters all non-default comparators.
*/
public
function
reset
()
/*: void*/
{
$this
->
customComparators
=
[];
}
private
function
registerDefaultComparators
():
void
{
$this
->
registerDefaultComparator
(
new
MockObjectComparator
);
$this
->
registerDefaultComparator
(
new
DateTimeComparator
);
$this
->
registerDefaultComparator
(
new
DOMNodeComparator
);
$this
->
registerDefaultComparator
(
new
SplObjectStorageComparator
);
$this
->
registerDefaultComparator
(
new
ExceptionComparator
);
$this
->
registerDefaultComparator
(
new
ObjectComparator
);
$this
->
registerDefaultComparator
(
new
ResourceComparator
);
$this
->
registerDefaultComparator
(
new
ArrayComparator
);
$this
->
registerDefaultComparator
(
new
NumericComparator
);
$this
->
registerDefaultComparator
(
new
ScalarComparator
);
$this
->
registerDefaultComparator
(
new
TypeComparator
);
}
private
function
registerDefaultComparator
(
Comparator
$comparator
):
void
{
$this
->
defaultComparators
[]
=
$comparator
;
$comparator
->
setFactory
(
$this
);
}
}
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Sun, Oct 4, 00:36 (2 w, 6 d ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
8f/3e/62389adfcf7bda729e82fd81e9dc
Default Alt Text
Factory.php (3 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment