NYCPHP Meetup

NYPHP.org

[nycphp-talk] Object Methods and Properties

Phillip Powell phillip.powell at adnet-sys.com
Thu Jul 29 13:03:43 EDT 2004


Joe Crawford wrote:

>Call to undefined function is_defined()
>
>i dont see where there is a function with that name anywhere.
>
>  
>
I meant defined() sorry.  I think you might want to escalate this to 
someone as ubersmart as Daniel.

Phil

>Joe Crawford Jr.
>
>
>On Thu, 2004-07-29 at 12:57, Phillip Powell wrote:
>  
>
>>Joe Crawford wrote:
>>
>>    
>>
>>>Something is still wrong with this code
>>>
>>>	function setPart($part, $val, $append=FALSE) {
>>>		if (in_array($part, get_class_vars(get_class($this)))) {
>>>			if(($part) && ($val)) {
>>>				if ($append) $this->{'_' . $part} .= $val;
>>>				else $this->{'_' .$part} = $val;
>>>			}
>>>			return true;
>>>		}
>>>		$this->sendError('undefined property.');
>>>	}
>>>
>>>
>>>
>>>this code is still allowing properties to be set that have not been
>>>defined :(
>>> 
>>>
>>>      
>>>
>>Use is_defined() to see if the property is defined, perhaps a 
>>combination of
>>is_defined() and !isset().  Other than that, I have no idea.
>>
>>Phil
>>
>>    
>>
>>>here is my entire class
>>>
>>>
>>><?
>>>include_once('smarty/Smarty.class.php');
>>>class template extends Smarty {
>>>
>>>	private $_header;
>>>	private $_body;
>>>	private $_footer;
>>>
>>>	function template() {
>>>		$this->_header = null;
>>>		$this->_body = null;
>>>		$this->_footer = null;
>>>
>>>		$this->Smarty();
>>>
>>>		$this->template_dir = BASE_DIR.'/smarty/dfs/templates/';
>>>		$this->compile_dir = BASE_DIR.'/smarty/dfs/templates_c/';
>>>		$this->config_dir = BASE_DIR.'/smarty/dfs/configs/';
>>>		$this->cache_dir = BASE_DIR.'/smarty/dfs/cache/';
>>>
>>>		$this->caching = false;
>>>		$this->assign('app_name','Developer Financial Software');
>>>	}
>>>
>>>	function header($val) {
>>>		if($val) {
>>>			$this->_header = $val;
>>>		} else {
>>>			return $this->_header;
>>>		}
>>>	}
>>>
>>>	function body($val) {
>>>		if($val) {
>>>			$this->_body = $val;
>>>		} else {
>>>			return $this->_body;
>>>		}
>>>	}
>>>
>>>	function footer($val) {
>>>		if($val) {
>>>			$this->_footer .= $val;
>>>		} else {
>>>			return $this->_footer;
>>>		}
>>>	}
>>>
>>>	function setPart($part, $val, $append=FALSE) {
>>>		if (in_array($part, get_class_vars(get_class($this)))) {
>>>			if(($part) && ($val)) {
>>>				if ($append) $this->{'_' . $part} .= $val;
>>>				else $this->{'_' .$part} = $val;
>>>			}
>>>			return true;
>>>		}
>>>		$this->sendError('undefined property.');
>>>	}
>>>	
>>>	function sendError($err) {
>>>		if($err) {
>>>			echo $err;	
>>>			exit;
>>>		}	
>>>	}
>>>
>>>	function displayError($live, $page) {
>>>		if($page) {
>>>			if($live) {
>>>				$this->display('error/static/'.$page.'.tpl');
>>>			} else {
>>>				$this->display('error/'.$page.'.tpl');
>>>			}
>>>		} else {
>>>			$this->display('error/static/generic.tpl');
>>>		}
>>>	}
>>>
>>>	function displayPage($page) {
>>>		$this->assign('header', $this->_header);
>>>		$this->assign('body', $this->_body);
>>>		$this->assign('footer', $this->_footer);
>>>		$this->display($page.'.tpl');
>>>	}
>>>}
>>>?>
>>>
>>>here is my index.php page
>>>
>>><?
>>>include_once('include/global.php');
>>>
>>>$page->subTitle('Home');
>>>$tpl->setPart('header', $tpl->fetch('header.tpl'));
>>>$tpl->setPart('body', $tpl->fetch('main.tpl'));
>>>$tpl->setPart('footer', $tpl->fetch('footer.tpl'));
>>>$tpl->setPart('test', 'this is a test');
>>>echo $tpl->_test;
>>>
>>>$tpl->displayPage('page');
>>>
>>>?>
>>>
>>>
>>>when the page is executed it echo's the value of $tpl->_test when in
>>>fact _test should not be set since i have no var $_test; in my class
>>>definition.
>>>
>>>anyone here that can shed some light on this problem?
>>>
>>>Joe Crawford Jr.
>>>
>>>
>>>
>>>On Wed, 2004-07-28 at 21:33, Joe Crawford wrote:
>>> 
>>>
>>>      
>>>
>>>>Dan,
>>>>
>>>>i do not want the class setting any undefined properties.
>>>>
>>>>Joe Crawford Jr.
>>>>
>>>>
>>>>On Wed, 2004-07-28 at 00:16, Dan Cech wrote:
>>>>   
>>>>
>>>>        
>>>>
>>>>>Phillip Powell wrote:
>>>>>     
>>>>>
>>>>>          
>>>>>
>>>>>>Joe Crawford wrote:
>>>>>>
>>>>>>       
>>>>>>
>>>>>>            
>>>>>>
>>>>>>>Phill,
>>>>>>>
>>>>>>>thanks that worked just as expected...
>>>>>>>
>>>>>>>Now anyone know of a way to make sure $part is actually one of the class
>>>>>>>variables?
>>>>>>>         
>>>>>>>
>>>>>>>              
>>>>>>>
>>>>>>if (in_array($part, get_class_vars(get_class($this)))) { // DO STUFF }
>>>>>>
>>>>>>Assuming you have instantiated a MyClass object prior to this line
>>>>>>       
>>>>>>
>>>>>>            
>>>>>>
>>>>>Actually you would be better off with:
>>>>>
>>>>>function setPart($part = NULL, $val = NULL, $append = FALSE) {
>>>>>  if (isset($part) && isset($val) && @isset($this->{'_'.$part})) {
>>>>>    if ($append) {
>>>>>      $this->{'_'.$part} .= $val;
>>>>>    } else {
>>>>>      $this->{'_'.$part} = $val;
>>>>>    }
>>>>>    return TRUE;
>>>>>  }
>>>>>  return FALSE;
>>>>>}
>>>>>
>>>>>There is no need to go through the added overhead of calling 
>>>>>get_class_vars and get_class, unless you want to disallow setting any 
>>>>>vars not defined in the class definition.
>>>>>
>>>>>Using the @isset(..) method you could define an addPart and delPart 
>>>>>function if required, which you can not do with Phil's solution.
>>>>>
>>>>>Dan
>>>>>
>>>>>_______________________________________________
>>>>>New York PHP Talk
>>>>>Supporting AMP Technology (Apache/MySQL/PHP)
>>>>>http://lists.nyphp.org/mailman/listinfo/talk
>>>>>http://www.newyorkphp.org
>>>>>
>>>>>
>>>>>     
>>>>>
>>>>>          
>>>>>
>>>>_______________________________________________
>>>>New York PHP Talk
>>>>Supporting AMP Technology (Apache/MySQL/PHP)
>>>>http://lists.nyphp.org/mailman/listinfo/talk
>>>>http://www.newyorkphp.org
>>>>
>>>>
>>>>   
>>>>
>>>>        
>>>>
>>>_______________________________________________
>>>New York PHP Talk
>>>Supporting AMP Technology (Apache/MySQL/PHP)
>>>http://lists.nyphp.org/mailman/listinfo/talk
>>>http://www.newyorkphp.org
>>>
>>> 
>>>
>>>      
>>>
>
>_______________________________________________
>New York PHP Talk
>Supporting AMP Technology (Apache/MySQL/PHP)
>http://lists.nyphp.org/mailman/listinfo/talk
>http://www.newyorkphp.org
>
>  
>


-- 
---------------------------------------------------------------------------------
Phil Powell
Multimedia Programmer
BPX Technologies, Inc.
#: (703) 709-7218 x107 
Fax: (703) 709-7219

	




More information about the talk mailing list