Հատկությունների գրառում կախարդանքի միջոցով OOP-ում PHP-ում
__set կախարդական մեթոդը կանչվում է,
երբ փորձում են փոխել գոյություն չունեցող
կամ թաքնված հատկության արժեքը: Որպես պարամետրեր
այն ընդունում է հատկության անունը և այն արժեքը, որին
փորձում են վերագրել այն:
Եկեք նայենք գործնական օրինակով:
Ենթադրենք մենք ունենք հետևյալ Test դասը:
<?php
class Test
{
private $prop1;
private $prop2;
}
?>
Եկեք այս դասում ստեղծենք __set կախարդական
մեթոդը, որը var_dump ֆունկցիայի միջոցով
կարտածի այն հատկության անունը,
որին դիմել են, և արժեքը,
որը փորձում են սահմանել այդ հատկությանը.
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
var_dump($property . ' ' .$value);
}
}
?>
Ստուգենք մեր դասի աշխատանքը.
<?php
$test = new Test;
$test->prop = 'value'; // __set մեթոդի var_dump-ը կարտածի 'prop value'
?>
Եկեք այժմ սահմանենք արժեք
այն հատկությանը, որի անունը պահվում է $property
փոփոխականում.
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
$this->$property = $value; // սահմանում ենք արժեքը
}
}
?>
Այժմ մենք կկարողանանք գրել փակ հատկություններին դասի սահմաններից դուրս.
<?php
$test = new Test;
$test->prop1 = 1; // կգրենք 1
$test->prop2 = 2; // կգրենք 2
?>
Գրել կարող ենք, սակայն, ստուգել՝ արդյոք ինչ-որ բան գրվեց այնտեղ - ոչ, քանի որ հատկությունները փակ են:
Կարելի է ստեղծել գետտեր այդ հատկությունների համար կամ
ուղղակի օգտագործել __get կախարդական մեթոդը:
Օգտագործենք երկրորդ տարբերակը.
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
$this->$property = $value;
}
// Հատկությունների կախարդական գետտերը.
public function __get($property)
{
return $this->$property;
}
}
?>
Ահա այժմ մենք կարող ենք ստուգել մեր դասի աշխատանքը: Ստուգենք.
<?php
$test = new Test;
$test->prop1 = 1; // կգրենք 1
$test->prop2 = 2; // կգրենք 2
echo $test->prop1; // կարտածի 1
echo $test->prop2; // կարտածի 2
?>
Իրականում, իհարկե, չարժե բոլորին թույլատրել գրել փակ հատկություններին, հակառակ դեպքում կկորչի այդ փակ հատկությունների իմաստը (ավելի հեշտ է դրանք դարձնել հանրային և վերջ):
Ուստի այս մեթոդը պետք է կիրառել միայն այն դեպքում, երբ դրա համար իսկապես անհրաժեշտություն կա: Հաջորդ դասերում մենք կդիտարկենք հաջող կիրառման օրինակներ: