Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F4097434
SampleContainerObject.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
1 KB
Referenced Files
None
Subscribers
None
SampleContainerObject.php
View Options
<?php
namespace
MediaWiki\Tests\Json
;
use
stdClass
;
use
Wikimedia\Assert\Assert
;
use
Wikimedia\JsonCodec\JsonCodecable
;
use
Wikimedia\JsonCodec\JsonCodecableTrait
;
/**
* Sample container object which uses JsonCodecableTrait to directly implement
* serialization/deserialization and uses class hints.
*/
class
SampleContainerObject
implements
JsonCodecable
{
use
JsonCodecableTrait
;
/** @var mixed */
public
$contents
;
/**
* Create a new SampleContainerObject which stores $contents
* @param mixed $contents
*/
public
function
__construct
(
$contents
)
{
$this
->
contents
=
$contents
;
}
// Implement JsonCodecable using the JsonCodecableTrait
/** @inheritDoc */
public
function
toJsonArray
():
array
{
return
[
'contents'
=>
$this
->
contents
,
// Note that json array keys need not correspond to property names
'test'
=>
(
object
)[],
// Test "array of" hints as well as regular hints
'array'
=>
[
$this
->
contents
],
];
}
/** @inheritDoc */
public
static
function
newFromJsonArray
(
array
$json
):
SampleContainerObject
{
Assert
::
invariant
(
get_class
(
$json
[
'test'
]
)
===
stdClass
::
class
&&
count
(
get_object_vars
(
$json
[
'test'
]
)
)
===
0
,
"Ensure that the 'test' key is restored correctly"
);
Assert
::
invariant
(
is_array
(
$json
[
'array'
]
)
&&
count
(
$json
[
'array'
]
)
===
1
,
"Ensure that the 'array' key is restored correctly"
);
return
new
SampleContainerObject
(
$json
[
'contents'
]
);
}
/** @inheritDoc */
public
static
function
jsonClassHintFor
(
string
$keyName
):
?
string
{
if
(
$keyName
===
'contents'
)
{
// Hint that the contained value is a SampleObject. It might be!
return
SampleObject
::
class
;
}
elseif
(
$keyName
===
'array'
)
{
// Hint that the contained value is a *array of* SampleObject.
// It might be!
return
SampleObject
::
class
.
'[]'
;
}
elseif
(
$keyName
===
'test'
)
{
// This hint will always be correct; note that this is a key
// name not a property of SampleContainerObject
return
stdClass
::
class
;
}
return
null
;
}
}
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Tue, Aug 18, 14:52 (3 w, 6 d ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
ce/d1/b8d2fd8d4c836455765c62e76d85
Default Alt Text
SampleContainerObject.php (1 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment