Как из функции класса получить доступ к переменной по имени?

nl2br

Новичок
Как из функции класса получить доступ к переменной по имени?

php5.
при вызове переменной такого вида

${$this->NavigationVariablesNames[0]}
выдаёт ошибку, что переменной не существует, хотя она точно есть :(
ЗЫ
Думал, что надо сделать Global/
глобальной сделать не могу, т.к. пишу модуль, переменной не упраляю.
 

nl2br

Новичок
файл 1.php
Код:
<?php 
 
//Один модуль 
class DClass
{
      public $VarName;//array
      function Func()
      {
               echo ${$this->VarName[0]};
      }
}

?>
2.php
Код:
<?php

include('1.php');

$Var1=new DClass;

$Var1->VarName[0]='about';

$Var1->Func();

?>
При вызове 2.php ошибка:
Notice: Undefined variable: about in c:\program files\apache group\Apache\htdocs\prim\1.php on line 9

На 9-ой строке файла 1.php echo ${$this->VarName[0]};
 

Макс

Старожил PHPClub
все верно. Переменная $about у тебя не объявлена. В коде у тебя ее нет
 

Photus

Guest
Отвечаю за nl2br:

Изняюсь :) примерчик недописали.

Вставили перед вызовом $Var1->Func(); такую строку:

$about=1;

Всё равно не пашет.
 

Макс

Старожил PHPClub
если без global-ов, то никак.
Ну а вообще, так не пишут
 

Photus

Guest
Ну а почему echo ${'about'}; в том же месте, где обьявлена about проходит, а из класса нет. Понимаю что область видимости какаято суперхитрая, но какая и где это мождно прочитать?


Ну а вообще, так не пишут
А как пишут?
 

Photus

Guest
Ну мы на данном этапе так и сделали. Но, имхо, это очень даже некрасиво.

Можно конечно передавать ссылку на переменную(в PHP надеюсь это возможно), но тут другой проблем:
класс будет юзаться другими людьми. Мы хотим сделать его использование как можно более простым(например зачем передавать значение, если есть ИМЯ переменной - надо же юзать ВСЕ возможности интерпретируемого языка).

-~{}~ 02.11.04 17:06:

Кстати, упреждая вопрос:"Зачем передавать имя переменной?"
Отвечу: "Надо."
 

tony2001

TeaM PHPClub
а зачем тебе ИМЯ переменной, если тебе в конце концов нужно именно ЗНАЧЕНИЕ?
ты называешь это использованием всех возможностей?
я называю это глупостью.

-~{}~ 02.11.04 17:09:

>Кстати, упреждая вопрос:"Зачем передавать имя переменной?"
>Отвечу: "Надо."
Тебе уже ответили: "Нельзя".
 

Photus

Guest
tony2001, не кипятись плиз.

Дело в том что имя переменной используется ещё и в другом месте в классе. Формируются ссылки типа:

http://...../?...&наше_многострадальное_имя_переменой=какое-то_значение,_тоже_берущееся_извратным_путём&....

-~{}~ 02.11.04 17:14:

>Тебе уже ответили: "Нельзя".

НУ нельзя так нельзя. А почему? - никто не сказал. Тут уже интерес чисто теоретический.
 

tony2001

TeaM PHPClub
Photus
хинт:
если уж сделано настолько извратно, то можно передавать И имя, И значение.

-~{}~ 02.11.04 17:16:

>НУ нельзя так нельзя. А почему? - никто не сказал. Тут уже интерес чисто теоретический.
эта переменная из другой области видимости.
 

Photus

Guest
если уж сделано настолько извратно, то можно передавать И имя, И значение
Мы извращаемся только ради того, чтобы классы можно было юзать самый наипростейшим образом.


эта переменная из другой области видимости.
Хе. Ну это я уж понял. А где можно прочитать про области видимости? В стандартных описаниях пхп такие извраты к сожалению не описаны.

-~{}~ 02.11.04 17:20:

можно передавать массив, где ключ -- имя
Слишком сложно. Повторюсь опять:

"Мы извращаемся только ради того, чтобы классы можно было юзать самый наипростейшим образом."
 

Макс

Старожил PHPClub
если уж и пишите криво, то тогда и global в свой класс добавьте. Сразу решит вашу проблему

-~{}~ 02.11.04 17:26:

мне вот интересно, а кто такой класс использовать будет ? ;)
 

Profic

just Profic (PHP5 BetaTeam)
$GLOBALS?
Яотя я для повторного генерирования строк запроса использую имена и только их, но не переменных, а ключей нужных массивов...
 

Photus

Guest
http://php.net/manual/ru/language.variables.scope.php
Большой СПАСИБ!!!


Сам то я Сишник. Изняюсь. Привык, что переменные глоабльные боступны везде.




А чё сразу не сказали про $GLOBALS[]????? PHPешники.
$GLOBALS[имя перменной] даёт то что мне нужно.
 

Макс

Старожил PHPClub
Чтобы в функции вывести внешнюю переменную можно
1. объявить в функции ее как глобальную
2. передать ее значение в функцию в качестве параметра.

Все, третьего не дано.
 
Сверху