Obyektlərin PHP-də OOP-də istinadla ötürülməsi
Tutaq ki, bizə User sinfi verilib:
<?php
class User
{
public $name;
public $age;
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
}
?>
Tutaq ki, biz bu sinfin obyektini yaradırıq:
<?php
$user = new User('john', 30);
?>
İndi aşağıdakı vəziyyəti təsəvvür edin: siz
$user dəyişəninin qiymətini başqa bir
dəyişənə, məsələn, $test-ə mənimsətmək
istəyirsiniz.
Əgər söhbət obyektlərdən deyil, primitivlərdən,
yəni sətirlərdən, ədədlərdən, massivlərdən və s.-dən
gedirsə, onda $test dəyişəninə $user
dəyişəninin qiymətinin surəti düşərdi.
Bu o deməkdir ki, sonradan hər hansı bir dəyişəndə edilən dəyişikliklər digər dəyişənin qiymətini dəyişməzdi. Bir nümunəyə baxaq:
<?php
$user = 1;
$test = $user; // $test dəyişənində indi 1 var
$test = 2; // $test dəyişənində indi 2 var, $user-də isə hələ də 1
?>
Obyektlərlə isə vəziyyət fərqlidir - başqa bir dəyişənə yazılanda obyektlər surətlənmir, əksinə istinadla ötürülür: bu o deməkdir ki, hər iki dəyişənin qiyməti eyni bir obyektdir. Bunun mühüm bir nəticəsi var: əgər obyektin hansısa xassələri bir dəyişən vasitəsilə dəyişdirilsə, ikinci dəyişəndə də eyni dəyişikliklər görünəcək.
Gəlin praktikada baxaq. İstifadəçi ilə bir obyekt yaradaq:
<?php
$user = new User('john', 30);
?>
Obyekti başqa bir dəyişənə mənimsədək:
<?php
$test = $user;
?>
$test dəyişənində name
xassəsini dəyişək:
<?php
$test->name = 'eric';
?>
Gəlin ümumi obyektin dəyişdiyini yoxlayaq.
$user dəyişənindən name
xassəsini çıxadaq:
<?php
echo $user->name; // 'eric' çıxardacaq!
?>
Product sinfini yaradın, hansında ki,
aşağıdakı xassələr olacaq: name,
price.
Product sinfinin obyektini yaradın,
onu $product1 dəyişəninə yazın.
$product1 dəyişəninin qiymətini
$product2 dəyişəninə mənimsədin.
Hər iki dəyişənin eyni bir obyektə istinad
etdiyini yoxlayın.