__set_state ක්රමය
__set_state ක්රමය ස්ථිතික වන අතර වස්තුවක් මත var_export ශ්රිතය භාවිතා කරන විට ස්වයංක්රීයව කැඳවනු ලැබේ. එය ප්රතිස්ථාපිත ගුණාංග සමඟ පන්තියේ නව අවස්ථාවක් ආපසු දැමිය යුතුය. වස්තු serialization සහ deserialization සඳහා මෙම ක්රමය ප්රයෝජනවත් වේ.
වාක්ය රචනය
public static function __set_state(array $properties): object
උදාහරණය
පන්තියක් සාදා එහි __set_state ක්රමය ක්රියාත්මක කරමු:
<?php
class MyClass {
public $prop1;
public $prop2;
public function __construct($val1, $val2) {
$this->prop1 = $val1;
$this->prop2 = $val2;
}
public static function __set_state($array) {
return new self($array['prop1'], $array['prop2']);
}
}
$obj = new MyClass('a', 'b');
$exported = var_export($obj, true);
eval('$newObj = ' . $exported . ';');
var_dump($newObj);
?>
කේතය ක්රියාත්මක කිරීමේ ප්රතිඵලය:
object(MyClass)#2 (2) {
["prop1"]=> string(1) "a"
["prop2"]=> string(1) "b"
}
උදාහරණය
පුද්ගලික ගුණාංග සමඟ __set_state භාවිතා කිරීම:
<?php
class PrivateClass {
private $secret;
public function __construct($value) {
$this->secret = $value;
}
public static function __set_state($array) {
$obj = new self($array['secret']);
return $obj;
}
}
$privateObj = new PrivateClass('12345');
$exported = var_export($privateObj, true);
eval('$newPrivateObj = ' . $exported . ';');
var_dump($newPrivateObj);
?>
කේතය ක්රියාත්මක කිරීමේ ප්රතිඵලය:
object(PrivateClass)#2 (1) {
["secret":"PrivateClass":private]=> string(5) "12345"
}
මෙයද බලන්න
-
var_exportශ්රිතය,
විචල්යය ස්ට්රිංගයකට නිර්යාත කරයි -
__sleepක්රමය,
වස්තුව serialize කිරීමට පෙර කැඳවනු ලැබේ -
__wakeupක්රමය,
වස්තුව deserialize කරන විට කැඳවනු ලැබේ