ValueObject
ValueObject, Enum implementation by trait
Install / Use
/learn @satooshi/ValueObjectREADME
ValueObject, Enum, BitField
ValueObject
<?php
use Satooshi\Component\ValueObject\ValueObject;
use Satooshi\Component\ValueObject\ValueObjectTrait;
final class SampleValueObject implements ValueObject
{
use ValueObjectTrait;
private $value1;
private $value2;
public function __construct($value1, $value2)
{
$this->value1 = $value1;
$this->value2 = $value2;
}
public function isSameValueAs(ValueObject $other)
{
if (!$this->isValidateType($other)) {
return false;
}
return true;
}
public function serialize()
{
return serialize([$this->value1, $this->value2]);
}
public function unserialize($serialized)
{
list($this->value1, $this->value2) = unserialize($serialized);
}
}
Enum
<?php
use Satooshi\Component\Enum\Enum;
use Satooshi\Component\Enum\EnumValueObject;
/**
* @method isMale()
* @method isFemale()
*/
final class Gender implements EnumValueObject
{
use Enum;
const MALE = 'M';
const FEMALE = 'F';
// test purpose
public function toJson()
{
return json_encode([
'name' => $this->getName(),
'value' => $this->getValue(),
'isMale' => var_export($this->isMale(), true),
'isFemale' => var_export($this->isFemale(), true),
]);
}
}
$male1 = Gender::createMale();
echo $male1->toJson(), PHP_EOL;
// {"name":"MALE","value":"M","isMale":"true","isFemale":"false"}
$male2 = Gender::createMale();
echo $male2->toJson(), PHP_EOL;
// {"name":"MALE","value":"M","isMale":"true","isFemale":"false"}
$female1 = Gender::createFemale();
echo $female1->toJson(), PHP_EOL;
// {"name":"FEMALE","value":"F","isMale":"false","isFemale":"true"}
$female2 = Gender::createFemale();
echo $female2->toJson(), PHP_EOL;
// {"name":"FEMALE","value":"F","isMale":"false","isFemale":"true"}
// true
var_dump($male1->isSameValueAs($male2)); // bool(true)
var_dump($female1->isSameValueAs($female2)); // bool(true)
// false
var_dump($female1->isSameValueAs($male1)); // bool(false)
var_dump($female1->isSameValueAs($male2)); // bool(false)
// serialize
$serializedMale = serialize($male1);
var_dump($serializedMale);
// string(25) "C:6:"Gender":8:{s:1:"M";}"
$unserializedMale = unserialize($serializedMale);
var_dump($unserializedMale);
/*
object(Gender)#5 (1) {
["value":"Gender":private]=>
string(1) "M"
}
*/
// factory
$male = Gender::createMale();
var_dump($male);
/*
object(Gender)#6 (1) {
["value":"Gender":private]=>
string(1) "M"
}
*/
$female = Gender::createFemale();
var_dump($female);
/*
object(Gender)#7 (1) {
["value":"Gender":private]=>
string(1) "F"
}
*/
<?php
use Satooshi\Component\Enum\Enum;
use Satooshi\Component\Enum\EnumValueObject;
final class Enum2 implements EnumValueObject
{
use Enum;
const HOGE_FUGA = 1;
const FOO = 2;
}
$e21 = Enum2::createHogeFuga();
var_dump($e21);
/*
object(Enum2)#8 (1) {
["value":"Enum2":private]=>
int(1)
}
*/
var_dump(Enum2::getNames());
/*
array(2) {
[0]=>
string(9) "HOGE_FUGA"
[1]=>
string(3) "FOO"
}
*/
BitField
<?php
use Satooshi\Component\Flags\Flags;
use Satooshi\Component\Flags\FlagsValueObject;
final class BitField1 implements FlagsValueObject
{
use Flags;
const NONE = 0;
const A = 1;
const B = 2;
const C = 4;
const D = 8;
}
$result = BitField1::D | BitField1::C;
var_dump($result);
// int(12)
$bit = BitField1::createFlags($result);
var_dump($bit);
/*
object(BitField1)#9 (2) {
["value":"BitField1":private]=>
int(12)
["flagValues":"BitField1":private]=>
array(2) {
[0]=>
int(4)
[1]=>
int(8)
}
}
*/
$isNone = $bit->isNone();
$isA = $bit->isA();
$isB = $bit->isB();
$isC = $bit->isC();
$isD = $bit->isD();
var_dump($isNone, $isA, $isB, $isC, $isD);
/*
bool(false)
bool(false)
bool(false)
bool(true)
bool(true)
*/
Related Skills
node-connect
345.9kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
106.4kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
345.9kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
345.9kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。





