Օբյեկտների փոխանցում հղումով OOP-ում 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
?>
Օբյեկտների դեպքում այլ է՝ այլ փոփոխականին վերագրելիս օբյեկտները չեն պատճենվում, այլ փոխանցվում են հղումով. սա նշանակում է, որ այդ երկու փոփոխականներն էլ որպես արժեք ունեն մեկ և նույն օբյեկտը: Սա կարևոր հետևանք ունի. եթե օբյեկտի որոշ հատկություններ փոխվեն մեկ փոփոխականի միջոցով, ապա երկրորդ փոփոխականում կհայտնվեն նույն փոփոխությունները:
Տեսնենք գործնականում: Ստեղծենք օբյեկտ user-ով.
<?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 փոփոխականին: Ստուգեք,
որ երկու փոփոխականներն էլ հղվում են մեկ
և նույն օբյեկտին: