Page 1 of 1

A little Class Help

Posted: Wed May 25, 2005 9:40 pm
by hawleyjr
OK, I think its too late because I can't think clearly...

I'm using the following two classes to store HTML form element information.

For instance, say I have a group of check boxes:

box 1:
box label = 'Check Box 1'
box is checked

box 2:
box label = 'Check Box 2'
box is not checked

I'm trying to store the items by doing the following:

Code: Select all

$ElementContainer = & new HTML_ElementContainer(HTML_FORM_ELEMENT_CHECK_BOX);

$element1 = &$ElementContainer->addElement();
	$element1->setElementLabel('Check Box 1');
	$element1->setIsSelected(TRUE);

$element2 = &$ElementContainer->addElement();
	$element2->setElementLabel('Check Box 2');
	$element2->setIsSelected(FALSE);

echo '<HR><PRE>'; print_r($ElementContainer); echo '</PRE>';

echo '<HR><PRE>'; print_r($element1); echo '</PRE>';
However, my output is as follows:

Code: Select all

html_elementcontainer Object
(
    &#1111;label] =&gt; 
    &#1111;isSelected] =&gt; 
    &#1111;elementType] =&gt; 1
    &#1111;a_form_elements] =&gt; Array
        (
            &#1111;0] =&gt; html_formelements Object
                (
                    &#1111;label] =&gt; 
                    &#1111;isSelected] =&gt; 
                    &#1111;elementType] =&gt; 
                )

        )

)

html_formelements Object
(
    &#1111;label] =&gt; Check Box 1
    &#1111;isSelected] =&gt; 1
    &#1111;elementType] =&gt; 
)
And is what I want is:

Code: Select all

html_elementcontainer Object
(
    &#1111;label] =&gt; 
    &#1111;isSelected] =&gt; 
    &#1111;elementType] =&gt; 1
    &#1111;a_form_elements] =&gt; Array
        (
            &#1111;0] =&gt; html_formelements Object
                (
                    &#1111;label] =&gt; Check Box 1
                    &#1111;isSelected] =&gt; 1
                    &#1111;elementType] =&gt; 
                )
            &#1111;2] =&gt; html_formelements Object
                (
                    &#1111;label] =&gt; Check Box 2
                    &#1111;isSelected] =&gt; 
                    &#1111;elementType] =&gt; 
                )                

        )

)

Code: Select all

class HTML_FormElements{

	var $label = '';
	var $isSelected = FALSE;
	var $elementType = NULL;


	function HTML_FormElements(){
		
	}
	
	function setElementLabel($elementLabel){
		$this->label = &$elementLabel;	
	}
	function setIsSelected($isSelected = FALSE){
		$this->isSelected = &$isSelected;	
	}
	function setElementType($elementType){
		$this->elementType = &$elementType;	
	}	
	
}
class HTML_ElementContainer extends HTML_FormElements{
	
	var $a_form_elements = array();

	function HTML_ElementContainer($elementType){
		$this->setElementType($elementType);
	}
	
	function addElement(){
		
		$HTMLFEObj = & new HTML_FormElements();
		$this->a_form_elements[] = &$HTMLFEObj;
		
		return $HTMLFEObj;
	}
	

}

Posted: Thu May 26, 2005 10:02 am
by pickle
Seems pretty good for the most part. One question I have is why you're assigning by reference in all the setXXXXX functions in your HTML_FormElements class? I don't think that's necessary in those particular functions.

.... now, as to whether or not that'll fix your problem, I don't know :wink:

Posted: Thu May 26, 2005 1:59 pm
by hawleyjr
That is actually something I was doing trying to get it to work ( lol, didn't work )

I still can't get it to work if anyone has anymore ideas...?

Posted: Thu May 26, 2005 2:25 pm
by hawleyjr
OK, I got it to work by adding an & to the start of the function call addElement()

In the event that this may help someone else; here is what I did wrong:

When I was calling the function addElement() a class object was returned. However, the returned value was not referenced to the created object. By adding the & ex: &addElement(){} the returned value was a reference.

Code: Select all

class HTML_FormElements{
 
    var $label = '';
    var $isSelected = FALSE;
    var $elementType = NULL;
 
 
    function HTML_FormElements(){
        
    }
    
    function setElementLabel($elementLabel){
        $this->label = $elementLabel;    
    }
    function setIsSelected($isSelected = FALSE){
        $this->isSelected = $isSelected;    
    }
    function setElementType($elementType){
        $this->elementType = $elementType;    
    }    
    
}
class HTML_ElementContainer extends HTML_FormElements{
    
    var $a_form_elements = array();
 
    function HTML_ElementContainer($elementType){
        $this->setElementType($elementType);
    }
    
    function &addElement(){
        
        $HTMLFEObj = & new HTML_FormElements();
        $this->a_form_elements[] = &$HTMLFEObj;
        
        return $HTMLFEObj;
    }
    
 
}

$ElementContainer = & new HTML_ElementContainer(HTML_FORM_ELEMENT_CHECK_BOX);
 
$element1 = &$ElementContainer->addElement();
    $element1->setElementLabel('Check Box 1');
    $element1->setIsSelected(TRUE);
    

$element1 = &$ElementContainer->addElement();
    $element1->setElementLabel('Check Box 2');
    $element1->setIsSelected(FALSE);
  

echo '<HR><PRE>'; print_r($ElementContainer); echo '</PRE>';
Will Output:

Code: Select all

html_elementcontainer Object
(
    &#1111;label] =&gt; 
    &#1111;isSelected] =&gt; 
    &#1111;elementType] =&gt; HTML_FORM_ELEMENT_CHECK_BOX
    &#1111;a_form_elements] =&gt; Array
        (
            &#1111;0] =&gt; html_formelements Object
                (
                    &#1111;label] =&gt; Check Box 1
                    &#1111;isSelected] =&gt; 1
                    &#1111;elementType] =&gt; 
                )

            &#1111;1] =&gt; html_formelements Object
                (
                    &#1111;label] =&gt; Check Box 2
                    &#1111;isSelected] =&gt; 
                    &#1111;elementType] =&gt; 
                )

        )

)