Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с классами в php3 
V
    Опции темы
dmeet
Дата 14.12.2008, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 26.9.2008

Репутация: нет
Всего: нет



Суть проблемы: на сайте использовался класс 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()


Это сообщение отредактировал(а) dmeet - 14.12.2008, 14:39
PM MAIL   Вверх
solenko
Дата 14.12.2008, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: нет
Всего: 67



Это вполне легальная опреация. Для простоты понимания пример
Код

class test {
  private $some_var = 'some_value';
  public function printVar($name) {
     echo $this->$name;
  }
}
$v = new test();
$v->printVar('some_var');

в результате выдаст cстроку 
some_value


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
dmeet
Дата 15.12.2008, 07:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 26.9.2008

Репутация: нет
Всего: нет



Врубился. Спасибо. Это просто подстановка строки:
Код

$str="abc";

$this->$str - это то же самое, что  и $this->abc;


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Libraries | Следующая тема »


 




[ Время генерации скрипта: 0.1489 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.