ობიექტების გადაცემა მითითებით 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
?>
ობიექტებთან სხვაა სიტუაცია - სხვა ცვლადში ჩაწერისას ობიექტები არ უკოპირებულან, არამედ გადაეცემა მითითებით: ეს ნიშნავს, რომ ორივე ამ ცვლადის მნიშვნელობა არის ერთი და იგივე ობიექტი. აქედან გამომდინარეობა მნიშვნელოვანი დასკვნა: თუ რომელიმე ობიექტის თვისება შეიცვლება ერთი ცვლადის მეშვეობით, მეორე ცვლადშიც ეს ცვლილებები გამოჩნდება.
პრაქტიკაში ვნახოთ. შევქმნათ ობიექტი მომხმარებლით:
<?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 ცვლადს. შეამოწმეთ
რომ ორივე ცვლადი მიუთითებს ერთ
და იმავე ობიექტზე.