Re: Enforce a constant in a class.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 2010-01-22 at 11:33 +0000, Richard Quadling wrote:

> Hello,
> 
> One of the aspects of an interface is to enforce a public view of a
> class (as I see it).
> 
> Within PHP, interfaces are allowed to have constants, but you cannot
> override them in a class implementing that interface.
> 
> This seems wrong.
> 
> The interface shouldn't define the value, just like it doesn't define
> the content of the method, it only defines its existence and requires
> that a class implementing the interface accurately matches the
> interface.
> 
> Is there a reason for this behaviour?
> 
> 
> 
> _OR_
> 
> How do I enforce the presence of a constant in a class?
> 
> <?php
> interface SetKillSwitch {
> 	const KILL_SWITCH_SET = True;
> 
> 	// Produces an error as no definition exists.
> 	// const KILL_SWITCH_NOTES;
> 
> 	// Cannot override in any class implementing this interface.	
> 	const KILL_SWITCH_DATE = '2010-01-22T11:23:32+0000';
> }
> 
> class KilledClass implements SetKillSwitch {
> 	// Cannot override as defined in interface SetKillSwitch.
> 	// const KILL_SWITCH_DATE = '2010-01-22T11:23:32+0000';
> }
> ?>
> 
> I want to enforce that any class implementing SetKillSwitch also has a
> const KILL_SWITCH_DATE and a const KILL_SWITCH_NOTES.
> 
> I have to use reflection to see if the constant exists and throw an
> exception when it doesn't.
> 
> The interface should only say that x, y and z must exist, not the
> values of x, y and z.
> 
> Regards,
> 
> Richard.
> 
> --
> -----
> Richard Quadling
> "Standing on the shoulders of some very clever giants!"
> EE : http://www.experts-exchange.com/M_248814.html
> EE4Free : http://www.experts-exchange.com/becomeAnExpert.jsp
> Zend Certified Engineer : http://zend.com/zce.php?c=ZEND002498&r=213474731
> ZOPA : http://uk.zopa.com/member/RQuadling
> 


Constants are there for things that should never change. If you ever
need to change them, then whoever created the base class either didn't
think things through properly, or you're not. Imagine  a class that sets
the value of π (as is the erstwhile example for constants) If further
classes that implemented it were of a particular historical persuasion,
then they might want to redefine the constant as just 3. It seemed like
a good idea to the historical Roman Catholics at the time (it was
defined as 3 in the Bible after all) but it doesn't make it the correct
value (imagine the problems with volume calculations!)

Constants are so called for a good reason!

And for those interested, my source for the value of π is
http://gospelofreason.wordpress.com/2007/06/13/god-said-pi-3-stand-by-your-beliefs-dammit/


Thanks,
Ash
http://www.ashleysheridan.co.uk



[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux