otrdiena, 2011. gada 31. maijs

Ko es nezināju par PHP5


Neuzskatu ka es būtu php guru, bet savu pudu sāls kodējot gan esmu izēdis. Nebūdams pašapmierinātībā līdz galam ieslīdzis tipiņš sāku lasīt par OOP iekš PHP5. Izprasījis kolēģim lasāmvielu sāku izglītoties un voula - pirmais WTF? ir klāt.


Izrādās, ka "piešķirot mainīgajam objekta vērtību patiesībā tiek piešķirts objekta adrese". Šīs izmaiņas gan ir spēkā PHP 5. Iepriekšējā versijā viss objekts tika kopēts, kas varēja noveda pie atmiņas nelietderīgas izmantošanas, kas kļūst īpaši problemātiski, ja objekts satur lielu datu daudzumu.
Tālāk kods no http://www.php.net/manual/en/language.oop5.references.php
<?php
class {
    public $foo 1;
}  

$a = new A;
$b $a;     // $a and $b are copies of the same identifier
             // ($a) = ($b) = <id>
$b->foo 2;
echo "<pre>";
echo $a->foo."\n";


$c = new A;
$d = &$c;    // $c and $d are references
             // ($c,$d) = <id>

$d->foo 2;
echo $c->foo."\n";


$e = new A;

function foo($obj) {
    // ($obj) = ($e) = <id>
    $obj->foo 2;
}

foo($e);
echo $e->foo."\n";

?>

Izvades rezultāts:
2
2
2
Šīs ir viens no iemesliem PHP5 backwards incompability, īpaši jūtams sākot izmantot OOP. Taisnības labad jāpiebilst, ka iekš PHP4 OOP esot bijis apdalīts.



Nav komentāru:

Ierakstīt komentāru