2010-05-25 10 views
9

Pisałam jakiś kod php po długim sint robi rubin i przypadkowo napisałem:Dlaczego to działa? (Php zapis dot)

[[email protected] test]# cat run.php 
<?php 

class MyTest { 

    public function run() { 
     var_dump(this.test); 
    } 
} 

$object = new MyTest(); 
$object->run(); 
[[email protected] test]# php run.php 
string(8) "thistest" 
[[email protected] test]# 

Teraz powinno this.test zostały $ this-> test, ale kompilator był naprawdę szczęśliwy, że pozwolę temu biegać.

Czy ktoś wie jak (ten.test) został przekształcony w ciąg "thistest"?

Opracowano i wprowadzono na php 5.3.2 Amazon wystąpienia ami-e32273a6 (CentOS 5.4)

-Daniel

Odpowiedz

23

this i test są domyślnie przekształcane na łańcuchy i . jest operatorem konkatenacji.

+0

i ' . " konkatenuje w php –

+3

Ahh, piękne niejawne konwersje w PHP! PHP nigdy nie przestaje mnie zadziwiać. Przysięgam! – CMircea

+5

@iconiK Z odpowiednim raportowaniem błędów aktywny PHP powinien mieć dwa błędy a la "Niezdefiniowana stała' this', przyjmując ciąg 'this'. " Nie żeby to było naprawdę lepsze, uważam, po prostu jest to bardziej oczywiste. : o) – deceze

0

wyszukiwania php do stałej to i próby stałej, doent to znaleźć je tak podnieść wyjątek i konwertować to i test „to” i „test” i je optymalizuje (kropka służy do łączenia ciągów)