Re: Constants in class definitions

From: Date: Tue, 24 Feb 2004 01:26:38 +0000
Subject: Re: Constants in class definitions
References: 1 2  Groups: php.general 
Request: Send a blank email to php-general+get-178625@lists.php.net to get a copy of this message
Hi Adam.
I was wondering if using defined constants in class definitions is completely legal (or even good practice) in PHP. I've looked throught the PHP documentation and from what I can tell it is legal. However, I've had some problems with Turck MMCache and class definitions that are similar to above. I suspect that it's probably a bug with MMCache but I wanted to check to make sure that the code was completely correct.
I also use MMCache, mind sharing the problems you are experiencing?
Here's the situation: PHP 4.3.4 Apache 1.3.29 MMCache 2.4.6 I'm ending up with some garbage in certain class variables. The code runs fine without MMCache disabled. There seems to be a very specific circumstances under which the error occurs. Namely: 1. The constants must be defined in a seperate file. 2. The member array ($stuff, refer below) must be populated in the class definition, not the class constructor 3. index.php can't be modified after apache has been started. If I touch index.php then the problem disappears, but then if I restart apache the problem reappears. If you want to see the output of the script go to http://outreach.net.nz/test/ Here's the MMCache configuration: extension="mmcache.so" ;shm_size="0" defaults to the OS default, which is 32M on my system mmcache.shm_size="0" mmcache.cache_dir="/tmp/mmcache" mmcache.enable="1" mmcache.optimizer="1" mmcache.check_mtime="1" mmcache.debug="0" mmcache.filter="" mmcache.shm_max="0" mmcache.shm_ttl="0" mmcache.shm_prune_period="0" mmcache.shm_only="0" mmcache.compress="1" Here's the code: index.php <?php require_once( "include.php" ); class Yep{ var $stuff = array( HELLO => 'nope', goodbye => 'nah' ); //var $stuff = array(); function Yep(){ /*$this->stuff = array( HELLO => 'nope', goodbye => 'nah' );*/ echo 'yep constructor<br>'; } function stuff(){ echo '<pre>'; var_dump( $this->stuff ); echo '</pre>'; } } $yepper = new Yep(); $yepper->stuff(); echo '<br>'; var_dump( $yepper ); ?> include.php <?php define( 'HELLO', 'hello' ); define( 'goodbye', 'GOODBYE' ); ?> Thanks for the offer to share. Toro ##################################################################################### This e-mail message has been scanned for Viruses and Content and cleared by MailMarshal For more information please visit www.marshalsoftware.com #####################################################################################

« previous php.general (#178625) next »