PHP-dä OOP-da Jöwüpçiliklere magiýa arkaly ýetmek
Indiki magiýa usuly, biz bilen
derňäjegimiz, __get diýilýär. Bu
usul gizlin ýa-da goragly jöwüpçiligiň bahasyny
okamaga synanyşyk edilende işleýär.
Eger bir synpda __get usulyny amala aşyrsaň,
onda bar bolmadyan ýa-da gizlin jöwüpçiliklere
bolan ähli ýüzlenmeler şol usul tarapyndan
işleniler.
Şol wagt PHP awtomatiki taýdan haýyş edilen jöwüpçiligiň adyny şol usulyň birinji parametrine geçirer, we bu usulyň gaýtaran bahasy jöwüpçiligiň bahasy hökmünde kabul ediler, ýüze çykan ýüzlenme üçin.
Häzirlikçe nähili işleýändigi düşünüksiz bolup
biler, şonuň üçin amaly mysalda göreliň. Geliň
bizde şeýle Test synpy bolsun,
gizlin we umumy jöwüpçilikler bilen:
<?php
class Test
{
public $prop1 = 1; // umumy jöwüpçilik
private $prop2 = 2; // gizlin jöwüpçilik
}
?>
Geliň synpymyza magiýa usuly
__get goşalyň, başlangyçda diňe
ýüzlenilen jöwüpçiligiň adyny gaýtarmak
üçin:
<?php
class Test
{
public $prop1 = 1;
private $prop2 = 2;
public function __get($property)
{
return $property; // diňe jöwüpçiligiň adyny gaýtaryň
}
}
?>
Geliň döredilen magiýa usulynyň işini barlalyň. Üç görnüşli jöwüpçilige ýüzleneliň: umumy jöwüpçilige, gizli jöwüpçilige we bar bolmadyan jöwüpçilige:
<?php
$test = new Test;
// Umumy jöwüpçilige ýüzlenýäris:
echo $test->prop1; // 1 çykarar - ýagny jöwüpçiligiň bahasy
// Gizlin jöwüpçilige ýüzlenýäris:
echo $test->prop2; // 'prop2' çykarar - jöwüpçiligiň ady
// Bar bolmadyan jöwüpçilige ýüzlenýäris:
echo $test->prop3; // 'prop3' çykarar - jöwüpçiligiň ady
?>
Görşüňiz ýaly, bizim magiýa usulymyz gizlin we bar bolmadyan jöwüpçiliklere ýüzlenmäge jogap berýär, ýöne umumy jöwüpçiliklere ýüzlenmäge ser etmeýär - olar öňki ýaly işleýär.