PDA

View Full Version : Code works, but move it to a class and it stops


Big9erFan
12-04-2007, 04:46 PM
Ok, I've been tearing my hair out over this trying to figure out what is going on. I'm at a loss, and probably just missing something REALLY simple, but I'm at a total loss.

I'm writing a little custom vba module for my guild.

I have 3 templates that I pull in

So I do something like this


global $vbulletin;
eval('$home[$mods[\'modid\']][\'content\'] = "' . fetch_template('adv_progression_header') . '";');
$instances = $vbulletin->db->query_read( "SQL STUFF HERE" );
while ($instance = $vbulletin->db->fetch_array($instances))
{
$img_name = $instance['image'];
$name = $instance['name'];
eval('$home[$mods[\'modid\']][\'content\'] .= "' . fetch_template('adv_progression_data') . '";');
}


That works fine.

Now, trying to put it into a class


class cls_progression
{
var $theDB;
function cls_progression( $DB )
{
$this->theDB = $DB;
}

function LoadInstances()
{
$instances = $this->theDB->db->fetch_array( $this->theDB->db->query_read("SQL STUFF HERE" ) );
$iCount = $this->theDB->db->num_rows($instances);
echo "iCount = $iCount";
while ($instance = $this->theDB->db->fetch_array($instances))
{
$img_name = $instance['image'];
$name = $instance['name'];
eval('$home[$mods[\'modid\']][\'content\'] .= "' . fetch_template('adv_progression_data') . '";');
}
}

//call the class:
$progress = new cls_progression( $vbulletin );

$progress->LoadInstances();


the class doesn't work at all. I know it is called, but the echo returns just
"iCount = "

I'm horribly confused :(

Opserty
12-04-2007, 05:44 PM
$instances = $this->theDB->db->fetch_array( $this->theDB->db->query_read("SQL STUFF HERE" ) );

Big9erFan
12-04-2007, 09:05 PM
Perhaps I'm just very dense today, but I don't see the difference or the problem >.<

Guest190829
12-04-2007, 09:18 PM
it should be like this:


class example
{
function exampe(&$registry, $otherags = 0 )
{
$this->registry =& $registry;
}

function fetch_example($id)
{
$this->registry->db->query_read("... some mysql ...");
/*
more code....
*/
}
}

$example1 = new example($vbulletin);
$example1->fetch_example(2);




Things to notice are the &'s and the naming convention of registry to hold the vBulletin object (not required, but conforms to vB's approach)

Big9erFan
12-04-2007, 09:45 PM
Ah!

Thank you very much. Still kind of new to php programming, but been writing in C++ for years.

Thanks again :)

Guest190829
12-04-2007, 10:07 PM
Yeah, the ampersand is a little annoyance with PHP 4, but it becomes habit to add it eventually.

Opserty
12-05-2007, 10:41 AM
Perhaps I'm just very dense today, but I don't see the difference or the problem >.<
You fetch the array and assigned it to a variable and then you tried to count the rows of that variable...you should be using the query handle to do it. i.e. remove the bit in red...

(Look at your code, you've used fetch_array() twice. )