Объекттерди PHP'те ООП жолу менен шилтеме аркылуу берүү
Алдыда User классы бар деп коёлу:
<?php
class User
{
public $name;
public $age;
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
}
?>
Бул классын объектин түзөлү деп коёлу:
<?php
$user = new User('john', 30);
?>
Эми төмөнкү учурду элестетиңиз: сиз
$user өзгөрмөсүнүн маанисин
башка өзгөрмөгө, мисалы
$test көчүрмөкчүсүз.
Эгерде сүйлөшүү объекттер жөнүндө эмес, примитивдер,
башкача айтканда саптар, сандар, массивдер ж.б.ү. жөнүндө болсо,
анда $test өзгөрмөсүнө $user өзгөрмөсүнүн
маанисинин көчүрмөсү түшөт.
Бул мындай дегенди билдирет: кийинчерээк каалаган өзгөрмөнү өзгөртүү башка өзгөрмөнүн маанисин өзгөртпөйт. Мисалга карайлы:
<?php
$user = 1;
$test = $user; // $test өзгөрмөсүндө азыр 1 бар
$test = 2; // $test өзгөрмөсүндө азыр 2 бар, ал эми $user'да - ошол эле 1
?>
Объекттер менен башкача - башка өзгөрмөгө жазганда объекттер көчүрүлбөйт, ал эми шилтеме аркылуу берилет: бул мындай дегенди билдирет: бул экөө тең өзгөрмөлөр бир эле объектти маани кылып алышат. Бул маанилүү натыйжага ээ: эгерде объекттин кандайдыр бир касиеттерин бир өзгөрмө менен өзгөртсөңүз, экинчи өзгөрмөдө ошол эле өзгөрүүлөр пайда болот.
Келгиле, иш жүзүндө көрөлү. Колдонуучу менен объект түзөлү:
<?php
$user = new User('john', 30);
?>
Объектти башка өзгөрмөгө ыйгарайлы:
<?php
$test = $user;
?>
name касиетин $test
өзгөрмөсүндө өзгөртөлү
<?php
$test->name = 'eric';
?>
Жалпы объект өзгөргөнүн текшерели.
name касиетин $user
өзгөрмөсүнөн чыгаралы:
<?php
echo $user->name; // 'eric' чыгарат!
?>
Product классын жасаңыз, анда
төмөнкү касиеттер болсун: name,
price.
Product классынын объектин түзүп,
аны $product1 өзгөрмөсүнө жазыңыз.
$product1 өзгөрмөсүнүн маанисин
$product2 өзгөрмөсүнө ыйгарыңыз. Экөө тең өзгөрмөлөр
бир эле объектке шилтеме жасаганын текшериңиз.