PHP-dä OOP-dä diňe okalýan aýratynlyklar
Içindäki ähli aýratynlyklary hususy bolan bir klas göräýli:
<?php
class Test
{
private $prop1 = 1;
private $prop2 = 2;
}
?>
Indi bu aýratynlyklary daşary dünýäde diňe okap bolýan ýagdaýa getireýäli. Öňler biz muny her bir aýratynlyk üçin getter döredip, setter döredilmeýän ýagdaýda edýärdik.
Bu meseläni çözmek üçin indi sehrli
usul __get-dan peýdalanyň. Onda talap
edilen aýratynlygyň bahasyny gaýtaryp bereris. Buny
nädip etmeli: talap edilen aýratynlygyň ady
__get usulynyň parametrine düşýär, bizim
ýagdaýymyzda $property.
Bu diýýän, biz içinde üýtgeýjide saklanylýan
aýratynlygyň ady bolan aýratynlygy şuňa meňzeş
okap bileris: $this->$property (aýratynlygyň
ady üýtgeýji bolup, ýagny başynda dollaryň
bolýandygyny, biz bu öwrenileni öňki sapaklarda
geçdik).
Görlüşi şuňa meňzeş bolan __get usulyny
dörediň:
<?php
class Test
{
private $prop1 = 1;
private $prop2 = 2;
public function __get($property)
{
return $this->$property;
}
}
?>
Aýratynlyklary okamak üçin ony ulanyň:
<?php
$test = new Test;
echo $test->prop1; // 1-ni çykarar
echo $test->prop2; // 2-ni çykarar
?>
Aýratynlyga bir zat ýazmaga synanyşmak ýalňyşlyga sebep bolýar:
<?php
$test = new Test;
$test->prop1 = 2; // ýalňyşlyk berer
?>
Bu bize gerek zat: aýratynlygy okap bolýar, ýöne ýazyp bolmaýar.
Ýöne ýok aýratynlygy okamaga synanyşmak ýalňyşlyk berer:
<?php
$test = new Test;
echo $test->prop3; // ýalňyşlyk berer
?>
Şu näsagy hem üns beriň: biz diňe okalýan aýratynlyklary köne usul bilen edende, aýratynlygy okamak üçin, biz getter-usulyny ulandy.
Täze usulda biz aýratynlyklara dogrudan-da olar umumy bolan ýaly ýüzlenýäris. Ýöne olaryň içine ýazyp bilmeýäris, olar hususy bolan ýaly.
User klasy berlen bolsun, onuň
aýratynlyklary getterler arkaly diňe okap
bolýan ýagdaýda:
<?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;
}
}
?>
Bu klassyň kodyny şeýle bir ýagdaýa
üýtgediň, getterler ýerine sehrli
usul __get ulanylsyn.