Суть проблемы: на сайте использовался класс FastTemplate, содранный давным давно с Perl и написанный для php 3-й версии. Все замечательно работало, пока на хостинге не обновили php до актуальной 5-й версии. Чтобы сильно не мучаться, решил заглянуть в код и попробовать заточить под php5. В методах класса столкнулся с таким синтаксисом $this->$имя переменной. Что данная запись означает? Таких штуковин немного, и они в теле класса не объявлены. Больше ничего инородного не заметил. Вот пример:
| Код | function parse ( $ReturnVar, $FileTags ) { $append = false; $this->LAST = $ReturnVar; $this->HANDLE[$ReturnVar] = 1;
if (gettype($FileTags) == "array") { unset($this->$ReturnVar); ------> Вот эта хрень
while ( list ( $key , $val ) = each ( $FileTags ) ) { if ( (!isset($this->$val)) || (empty($this->$val)) ) { $this->LOADED["$val"] = 1; if(isset($this->DYNAMIC["$val"])) { $this->parse_dynamic($val,$ReturnVar); } else { $fileName = $this->FILELIST["$val"]; $this->$val = $this->get_template($fileName); } }
// Array context implies overwrite
$this->$ReturnVar = $this->parse_template($this->$val,$this->PARSEVARS);
// For recursive calls.
$this->assign( array( $ReturnVar => $this->$ReturnVar ) );
} } // end if FileTags is array() else { // FileTags is not an array
$val = $FileTags;
if( (substr($val,0,1)) == '.' ) { // Append this template to a previous ReturnVar
$append = true; $val = substr($val,1); }
if ( (!isset($this->$val)) || (empty($this->$val)) ) { $this->LOADED["$val"] = 1; if(isset($this->DYNAMIC["$val"])) { $this->parse_dynamic($val,$ReturnVar); } else { $fileName = $this->FILELIST["$val"]; if(!isset($this->$ReturnVar)) { $this->$ReturnVar = ""; } $this->$val = $this->get_template($fileName); } }
if($append) { $this->$ReturnVar .= $this->parse_template($this->$val,$this->PARSEVARS); } else { $this->$ReturnVar = $this->parse_template($this->$val,$this->PARSEVARS); }
// For recursive calls.
$this->assign(array( $ReturnVar => $this->$ReturnVar) );
} return; } // End parse()
|
|