Objektu nodošana pa norādi OOP PHP
Pieņemsim, ka mums ir dots šāds klase User:
<?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:
<?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ā:
<?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:
<?php
$user = new User('john', 30);
?>
Piešķirsim objektu citam mainīgajam:
<?php
$test = $user;
?>
Mainīsim īpašību name
mainīgajā $test
<?php
$test->name = 'eric';
?>
Pārbaudīsim, vai mainījās kopīgais objekts.
Izvadīsim īpašību name
no mainīgā $user:
<?php
echo $user->name; // izvadīs 'eric'!
?>
Izveidojiet klasi Product, kurā
būs šādas īpašības: name,
price.
Izveidojiet klases Product objektu, ierakstiet
to mainīgajā $product1.
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.