PHP OOP හි කියවීමට පමණක් ඇති ගුණාංග
සියලුම ගුණාංග පුද්ගලික වර්ගයේ වන පන්තියක් සලකා බලමු:
<?php
class Test
{
private $prop1 = 1;
private $prop2 = 2;
}
?>
දැන් මෙම ගුණාංග බාහිර ලෝකයේදී කියවීමට පමණක් ලබා ගත හැකි වන පරිදි කරමු. මීට පෙර, අපි එක් එක් ගුණාංග සඳහා ගෙටර් තනා සෙටර් නොතනා මේ වගේ දේ කලා.
දැන් මෙම කාර්යය විසඳීම සඳහා අපි
මායා ක්රමය __get භාවිතා කරමු.
එය තුළ ඉල්ලූ ගුණාංගයේ අගය ආපසු ලබා දෙමු.
එය කරන්නේ කෙසේද: ඉල්ලූ ගුණාංගයේ නම
__get ක්රමයේ පරාමිතියට ඇතුළු වේ,
අපගේ නඩුවේදී එය $property වේ.
මෙයින් අදහස් කරන්නේ අපට විචල්යයක ගබඩා කර ඇති
නම සහිත ගුණාංගය කියවිය හැකි බවයි,
මෙහෙම: $this->$property (ගුණාංගයේ නම
විචල්යය වනු ඇත, එනම් ආරම්භයේ ඩොලර් සලකුණක් සමඟ,
අපි එය පෙර පාඩම් වලදී ඉගෙන ගත්තෙමු).
දැන් විස්තර කරන ලද ක්රමය __get කරමු:
<?php
class Test
{
private $prop1 = 1;
private $prop2 = 2;
public function __get($property)
{
return $this->$property;
}
}
?>
ගුණාංග කියවීම සඳහා අපි එය භාවිතා කරමු:
<?php
$test = new Test;
echo $test->prop1; // ප්රතිදානය කරන්නේ 1
echo $test->prop2; // ප්රතිදානය කරන්නේ 2
?>
ගුණාංගයකට යමක් ලිවීමට උත්සාහ කිරීම දෝෂයක් ඇති කරයි:
<?php
$test = new Test;
$test->prop1 = 2; // දෝෂයක් ලබා දෙයි
?>
අපට අවශ්යයි එය වනු ඇත: ගුණාංගය කියවිය හැකි, නමුත් ලිවිය නොහැක.
නොපවතින ගුණාංගයක් කියවීමට උත්සාහ කිරීම දෝෂයක් ලබා දෙයි:
<?php
$test = new Test;
echo $test->prop3; // දෝෂයක් ලබා දෙයි
?>
පහත සඳහන් සියුම් කරුණ ද සැලකිල්ලට ගන්න: අපි කියවීමට පමණක් ඇති ගුණාංග සාදන විට පැරණි ක්රමයෙන්, එවිට ගුණාංගය කියවීමට, අපි ගෙටර් ක්රමය භාවිතා කලෙමු.
නව ක්රමයේදී අපි නිශ්චිතවම ගුණාංග වෙත හැරෙමු, ඒවා පොදු යැයි සිතමින්. නමුත් ඒවාට ලිවිය නොහැක, ඒවා පුද්ගලික යැයි සිතමින්.
User කියන මේ පන්තිය ලබා දී ඇතැයි සිතමු,
එහි ගුණාංග
ගෙටර් භාවිතා කරමින් කියවීමට පමණක් ලබා ගත හැකිය:
<?php
class User
{
private $name;
private $age;
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
public function getName()
{
return $this->name;
}
public function getAge()
{
return $this->age;
}
}
?>
ගෙටර් වෙනුවට මායා
ක්රමය __get භාවිතා වන පරිදි මෙම පන්තියේ කේතය නැවත සකස් කරන්න.