NYCPHP Meetup

NYPHP.org

[nycphp-talk] Object Methods and Properties

Joe Crawford jcrawford at codebowl.com
Thu Jul 29 13:00:23 EDT 2004


i got it to work using isset() i just have to set the property values to
'' in the constructor rather than null.

Joe Crawford Jr.


On Thu, 2004-07-29 at 12:57, Joe Crawford wrote:
> Call to undefined function is_defined()
> 
> i dont see where there is a function with that name anywhere.
> 
> 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
> 
> 




More information about the talk mailing list