Sifa za Usomaji Pekee katika OOP katika PHP
Wacha tuchunguze darasa ambalo sifa zake zote ni za kibinafsi:
<?php
class Test
{
private $prop1 = 1;
private $prop2 = 2;
}
?>
Sasa tufanye hivi, ili sifa hizi katika ulimwengu wa nje ziwe zinapatikana kusomwa pekee. Hapo awali tumefanya kama hivi, tukiunda wageti kwa kila sifa na bila kuunda waseti.
Sasa hebu tutatue tatizo hili kwa kutumia
mbinu ya kichawi __get. Tutairudisha
ndani yake thamani ya sifa iliyoombwa. Jinsi
ya kufanya hivyo: jina la sifa iliyoombwa inaingia
katika kigezo cha mbinu __get, kwa upande wetu
$property.
Hii inamaanisha kuwa tunaweza kusoma sifa,
ambayo jina lake limehifadhiwa kwenye kigezo, hivi:
$this->$property (jina la sifa litakuwa
kigezo, yaani na dola mwanzoni, tumefanya
hii katika masomo yaliyopita).
Wacha tufanye mbinu __get iliyoelezewa:
<?php
class Test
{
private $prop1 = 1;
private $prop2 = 2;
public function __get($property)
{
return $this->$property;
}
}
?>
Tutumie kusoma sifa:
<?php
$test = new Test;
echo $test->prop1; // itatoa 1
echo $test->prop2; // itatoa 2
?>
Jaribio la kuandika kitu chochote kwenye sifa litasababisha hitilafu:
<?php
$test = new Test;
$test->prop1 = 2; // itatoa hitilafu
?>
Hii ndiyo tunayohitaji: sifa inaweza kusomwa, lakini haiwezi kuandikwa.
Jaribio la kusoma sifa isiyopo litasababisha hitilafu:
<?php
$test = new Test;
echo $test->prop3; // itatoa hitilafu
?>
Pia tafadhali zingatia undani ufuatao: tulipokuwa tukifanya sifa ziwe za usomaji pekee kwa njia ya zamani, ili kusoma sifa, tulitumia mbinu-getti.
Katika njia mpya tutaelekea haswa kwenye sifa, kana kwamba ni za umma. Lakini kuandika ndani yazo hatutaweza, kana kwamba ni za kibinafsi.
Wacha iwe kuna darasa User kama hivi, sifa
zake zinapatikana kusomwa pekee kwa kutumia
wageti:
<?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;
}
}
?>
Rekebisha msimbo wa darasa hili ili badala ya
wageti itumike mbinu ya kichawi
__get.