Kuandika Sifa kwa kutumia uchawi katika OOP katika PHP
Mbinu ya kichawi __set inaitwa
wakati wa kujaribu kubadilisha thamani ya sifa isiyopo
au iliyofichwa. Kama vigezo
inakubali jina la sifa na thamani, ambayo
inajaribu kupewa.
Tuangalie kwa mfano wa vitendo.
Acha tuwe na darasa Test kama hili:
<?php
class Test
{
private $prop1;
private $prop2;
}
?>
Wacha tufanye mbinu ya kichawi
__set katika darasa hili, ambayo kwa kutumia kitendakazi
var_dump itatoa jina la sifa,
ambayo imeingiliwa, na thamani,
ambayo inajaribu kuweka kwa sifa hiyo:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
var_dump($property . ' ' .$value);
}
}
?>
Tuangalie utendaji wa darasa letu:
<?php
$test = new Test;
$test->prop = 'value'; // var_dump ya mbinu __set itatoa 'prop value'
?>
Sasa tuweke thamani
kwa sifa, jina lake limehifadhiwa kwenye kigeuzi
$property:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
$this->$property = $value; // tunaweka thamani
}
}
?>
Sasa tunaweza kuandika kwenye sifa za kibinafsi ngeni ya darasa:
<?php
$test = new Test;
$test->prop1 = 1; // tunaandika 1
$test->prop2 = 2; // tunaandika 2
?>
Tunaweza kuandika, hata hivyo, kuangalia, imeandikwa kitu huko - hapana, kwa sababu sifa ni za kibinafsi.
Inawezekana kufanya kitafuta (getter) kwa sifa hizi au
kutumia tu mbinu ya kichawi
__get. Tutumie chaguo la pili:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
$this->$property = $value;
}
// Kitafuta sifa kichawi:
public function __get($property)
{
return $this->$property;
}
}
?>
Sasa tunaweza kuangalia utendaji wa darasa letu. Tuangalie:
<?php
$test = new Test;
$test->prop1 = 1; // tunaandika 1
$test->prop2 = 2; // tunaandika 2
echo $test->prop1; // itatoa 1
echo $test->prop2; // itatoa 2
?>
Kwa kweli, bila shaka, haifai kuruhusu kila mtu aandike kwenye sifa za kibinafsi, vinginevyo maana ya sifa hizi za kibinafsi inapotea (ni rahisi kuzifanya za umma na kila kitu).
Kwa hivyo mbinu hii inapaswa kutumiwa tu wakati kuna hitaji la kweli. Katika masomo yafuatayo tutaangalia mifano ya matumizi mazuri zaidi.