⊗ppOpAdPBR 23 of 107 menu

ობიექტების გადაცემა მითითებით 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 ცვლადს. შეამოწმეთ რომ ორივე ცვლადი მიუთითებს ერთ და იმავე ობიექტზე.

azbydeenesfrkakkptruuz