NYCPHP Meetup

NYPHP.org

[nycphp-talk] Object Methods and Properties

Phillip Powell phillip.powell at adnet-sys.com
Thu Jul 29 12:57:15 EDT 2004


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
>
>  
>


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

	




More information about the talk mailing list