class foo{
public $id = 1;
}
$a = new foo();
$b = $a;
$c = &$b;
unset($b);
Получава се, че $b сочи към $a, a $c съвпада с $b.
Идеята беше, че unset($b) ще унищожи и $c, но всъщност не се получава така. Би се получило така ако бяха псевдоними, а не референции. Същевременно обаче двете споделят памет, тъй като при промяна на стойността на една от тях се променя и другата:
unset($b);
echo $c->id; //1
----------------
$b = null;
echo $c->id; // няма обект
Което ще рече, че двете са референции на една и съща област от паметта, но при unset() на една от тях не се унищожава общата памет (както SASh се опитваше да ме убеди), а се премахва само референцията към нея (както е в perl).
Иначе в новото PHP има доста хубавки неща, едно от което ми хареса особено много. SASh го нарече hinting:
class foo1{
// whatever
}
class foo2{
public function bar(foo1 $obj){
// whatever
}
}
Ако подадената на bar() стойност не е точно обект от foo1, bar() трещи с Fatal Error. Нещото просто те кара да си пишеш нещата като хората! :)
Също интересна е и новата константа за грешки E_STRICT.
2 comments:
Ами то така или иначе ще изтрещи, щото fuinction не е много част от езика ;)
Освен туй както седят нещата не си личи много разликата между foo1 и fool ;)
Айде сега - заядливец...
fuinction е печатна грешка, защото парчетата код са писани за тук, а не са реалните парчета, с които тествах - не ми се dump-ваха 20-30 реда gibberish code тук.
Мерси за забележката обаче - поправих се.
Що се отнася до foo1 и foo2 - ми зависи си от font-а ти, пич. :) Освен това за компилатора са си перфектно различими. Пък и foo1 или fool - Whot's the odds, so long as your 'appy? ;P
Post a Comment