Проблема с областью видимости в классах

iekmuby

Guest
Проблема с областью видимости в классах

Столкнулся я с такой проблемой, и никак решить не могу
PHP:
class Db {
function select($Flds,$Exp,$Ord,$Lim,$code) {
	$r=mysql_query("select ".$Flds." from ".$this->tName." where ".$Exp." Order by ".$Ord ." ".$Lim);
	for ($i=0; $i<$this->n_r($r); $i++) {
	$f=mysql_fetch_array($r);
	echo $code;
	}
}
}
Это отрывок из класса. А скрипт, который работает с этим классом -
PHP:
$p = new Db;
............................
$p->select("name","id>0","id","",$f[name]);
Проблема в том, что он не видит переменной $f[name], хотя по логике все должно, работать. Если я пишу допустим "name", то он мне num_rows раз напишет name, т.е. механизм вроде работает. Вчем может быть проблема?
 

kvf77

Red Devil
Во-первых, если name - это не константа, то надо писать ее в кавычках $f['name'], а, во-вторых:

А ты сделай для начала так:

$p = new Db;
echo $f['name'];
$p->select("name","id>0","id","",$f[name]);
 

SiMM

Новичок
> Проблема в том, что он не видит переменной $f[name], хотя по логике все должно, работать.
По логике прежде чем использовать какую либо переменную, она должна быть определена.
 

iekmuby

Guest
Так она так-то уже проинициализированна в классе. Или это не так?
 

Flexx

Guest
Re: Проблема с областью видимости в классах

Автор оригинала: iekmuby
PHP:
class Db {
function select($Flds,$Exp,$Ord,$Lim,$code) {
	$r=mysql_query("select ".$Flds." from ".$this->tName." where ".$Exp." Order by ".$Ord ." ".$Lim);
	for ($i=0; $i<$this->n_r($r); $i++) {
	$f=mysql_fetch_array($r);
	echo $code;
	}
}
}
Ой... какой ужОс!!!

-~{}~ 27.05.05 09:14:

А где у тебя в классе проинициализирована переменная $n_r?

-~{}~ 27.05.05 09:15:

Или это метод... Или ты просто не дал весь код класса.
 

iekmuby

Guest
нет, просто я не дал весь класс, нафиг его писать. $n_r это mysql_num_rows() (я думаю все и так поняли)
 

Flexx

Guest
Блин... вот это я торможу.
Модератор, удали все мои последние ответы, плз.
 

StUV

Rotaredom
iekmuby
в чем смысл такой [...] конструкции?
т.е. объясни чего ты хочешь _на_самом_ деле добиться
скорее всего это решается иначе
 

iekmuby

Guest
Нужно это для того, чтобы удобно работать с БД мне. Вообще класс постороен по другому маденько, там вместо кода шаблоны инклудятся, но у меня возникла ситуация когдла мне допустим надо маленькую строку писать (например анонсы) лучше для этого использовать не шаблоны, а просто вставлять код (например "<p><b>".$f[zagol]."</b><br>".$f[text]."</p>"), по причине того, что не удобно делать много шаблонов. Вот я и задался такой целью
 

StUV

Rotaredom
естественный вариант - передавать в $code имя поля записи
и делать
echo $f[$code];

ps: боюсь только что идешь ты не по тому пути

-~{}~ 27.05.05 12:45:

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