Objektu nodošana pa norādi OOP PHP

Pieņemsim, ka mums ir dots šāds klase User:

User.php<?php
  class User
  {
    public $name;
    public $age;
    
    public function __construct($name, $age)
    {
      $this->name = $name;
      $this->age  = $age;
    }
  }
?>

Pieņemsim, ka mēs veidojam šīs klases objektu:

index.php<?php
  $user = new User('john', 30);
?>

Iedomājieties šādu situāciju: jūs vēlaties mainīgā $user vērtību piešķirt kādam citam mainīgajam, piemēram $test.

Ja runa būtu nevis par objektiem, bet par primitīviem tipiem, tas ir, par virknēm, skaitļiem, masīviem utt., tad mainīgajā $test nonāktu mainīgā $user vērtības kopija.

Tas nozīmē, ka izmaiņas jebkurā no mainīgajiem tālāk nemainītu otra mainīgā vērtību. Apskatīsim piemērā:

index.php<?php
  $user = 1;
  
  $test = $user; // mainīgajā $test tagad ir 1
  $test = 2;     // mainīgajā $test tagad ir 2, bet $user - joprojām 1
?>

Ar objektiem ir savādāk - piešķirot citam mainīgajam, objekti netiek kopēti, bet tiek nodoti pa norādi: tas nozīmē, ka abiem šiem mainīgajiem par vērtību ir viens un tas pats objekts. Tam ir svarīgas sekas: ja maina kādas objekta īpašības ar viena mainīgā palīdzību, otrajā mainīgajā parādīsies šīs pašas izmaiņas.

Apskatīsim praksē. Izveidosim objektu ar lietotāju:

index.php<?php
  $user = new User('john', 30);
?>

Piešķirsim objektu citam mainīgajam:

index.php<?php
  $test = $user;
?>

Mainīsim īpašību name mainīgajā $test

index.php<?php
  $test->name = 'eric';
?>

Pārbaudīsim, vai mainījās kopīgais objekts. Izvadīsim īpašību name no mainīgā $user:

index.php<?php
  echo $user->name; // izvadīs 'eric'!
?>
Задание 1

Izveidojiet klasi Product, kurā būs šādas īpašības: name, price.

Задание 2

Izveidojiet klases Product objektu, ierakstiet to mainīgajā $product1.

Задание 3

Piešķiriet mainīgā $product1 vērtību mainīgajā $product2. Pārbaudiet to, ka abi mainīgie norāda uz vienu un to pašu objektu.