Jump to content


Photo

Class Variables not holding values.


  • Please log in to reply
2 replies to this topic

#1 boralyl

boralyl
  • New Members
  • Pip
  • Newbie
  • 5 posts

Posted 21 July 2006 - 01:08 AM

I tried to simplify it, but let me just post all of the major components of the code.

First the code used to envoke all of these classes:
<?php
	$q = new Albums();
	$q->Album_id->equals(3);
	$q->debugLevel(2);
	$q->find();
	while($q->fetch())
	{
		echo $q->Album_id.'<br />';
	}
?>

The important part of the Albums class:
<?php
require_once("DataObject.php");
require_once("DataObjectColumn.php");

class Albums extends DataObject
{
	var $Id = null;
	var $Album_Name = null;

	function Albums()
	{
	    $this->DataObject();
		$this->clearObject();
	}

	function clearObject()
	{
		$this->Id = new DataObjectColumn($this, 'Id', false);
		$this->Album_Name = new DataObjectColumn($this, 'Album_Name', true);
	}
?>

The DataObjectColumn class:
<?php
	class DataObjectColumn
	{
		var $column = null;
		var $requires_quote = null;
		var $data_object = null;

		function DataObjectColumn(&$dataobject, $column_name, $requires_quote)
		{
		    $this->data_object =& $dataobject;
			$this->column = $column_name;
			$this->requires_quote = $requires_quote;
		}

		function equals($value)
		{
		    $sql = $this->data_object->quoteID($this->column) .' = '. $this->data_object->quote($value);
			$this->data_object->addWhere($sql);
		}
	}
?>

And finally the declaration of vars, constructor and member functions used above I included in the DataObject class
<?php
require_once("DataLayer.php");

	class DataObject extends DataLayer
	{
		var $result = null;
		var $args = null;
		var $sorts = null;
		var $whereConditions = null;
		var $selectDistinct = false;
		var $debugLevel = 0;
		var $test = 0;

		function DataObject()
		{
		    $this->DataLayer();
			$this->args = array();
			$this->sorts = array();
			unset($this->result);
		}

                        function quote($data)
		{
			if(!is_object($data))
				return '\'' . mysql_real_escape_string($data) . '\'';
			else
				return '\'' . mysql_real_escape_string($data->data_object) . '\'';
		}

		function quoteID( $field )
		{
			return "`$field`";
		}

                        function addWhere($sql)
		{
		    if($this->whereConditions != null)
			{
				$this->whereConditions .= ' AND '.$sql;
			}
			else
			{
				$this->whereConditions = $sql;
			}
		}

                  function find()
		{
                             echo $this->whereConditions;
?>

Now when I echo that variable it is null.  Even though if you echo it in addWheres it has the value of 3.  The DataLayer class just opens up a link to the database.  Any ideas as to what I am doing wrong?

#2 hvle

hvle
  • Members
  • PipPipPip
  • Advanced Member
  • 667 posts
  • Locationmelbourne, Australia

Posted 21 July 2006 - 02:20 AM

Your code is good!  no error in syntax nor structure.

You might want to look at other code which accessed $whereContitions and the parent class DataLayer.
Life's too short for arguing.

#3 boralyl

boralyl
  • New Members
  • Pip
  • Newbie
  • 5 posts

Posted 21 July 2006 - 05:44 PM

This may help...

If instead of calling $albums->Album_id->equals(5); I call addWhere directly such as $albums->addWhere('Albumi_id = 5'); The $this->whereConditions holds it's value.  It's calling addWhere from equals in the DataObjectColumn class that it isn't working.  Yet when I check to see what kind of object it is for both addWhere and equals it is the same type of object..Albums.




0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users