PHP OOP-da jynslaryň ýazylmagy seýilmeň bilen
Seýilmeň usuly __set
ýok bolan ýa-da gizlin jynsyň bahasyny
üýtgetmek synanyşygyna çagyrylýar. Parametr hökmünde
ol jynsyň adyny we ona belläp bolýan bahany
alýar.
Amaly mysalda göz ýetirip göräýeli.
Bizde Test atly klas berlen bolsun:
<?php
class Test
{
private $prop1;
private $prop2;
}
?>
Bu klasda seýilmeň
usul __set ýasaýaly, ol var_dump funksiýasyny
ulanyp, jynsyň adyny, ýüz tutulan,
we oňa düzmek synanyşylýan bahany,
çykarar:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
var_dump($property . ' ' .$value);
}
}
?>
Klasymyzyň işini barlaýaly:
<?php
$test = new Test;
$test->prop = 'value'; // __set usulynyň var_dump-y 'prop value' çykarar
?>
Indi bolsa, ady $property üýtgeýjide
saklanýan jynsa baha düzeliň:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
$this->$property = $value; // baha düzeris
}
}
?>
Indi biz hususy jynslary klasyn daşyndan ýazyp bileris:
<?php
$test = new Test;
$test->prop1 = 1; // 1 ýazarys
$test->prop2 = 2; // 2 ýazarys
?>
Biz ýazyp bileris, ýöne, ol ýere nämäniň ýazylýandygyny barlap bilmeris, sebäbi jynslar hususy.
Bu jynslar üçin getter ýasap bilersiňiz ýa-da
diňe seýilmeň usulyndan
__get peýdalanyp bilersiňiz. Ikinji warianty ulanýaly:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
$this->$property = $value;
}
// Jynslaryň seýilmeň getter-y:
public function __get($property)
{
return $this->$property;
}
}
?>
Indi bolsa klasymyzyň işini barlap bilýäris. Barlaýaly:
<?php
$test = new Test;
$test->prop1 = 1; // 1 ýazarys
$test->prop2 = 2; // 2 ýazarys
echo $test->prop1; // 1 çykarar
echo $test->prop2; // 2 çykarar
?>
Hakykatda-da, elbetde, hemme adama hususy jynslara ýazmaga rugsat bermek gerek däl, ýoksa bu hususy jynslaryň many yok bolar (ony ýönekeýlikde açyk etmek ýeterlik we hemme).
Şonuň üçin bu usuly diňe hakykatdanam zerur bolan ýagdaýlarda ulanmaly. Indiki sapaklarda biz ýene-de amatly ulanylyşynyň mysallaryny gözden geçireris.