From: "Gary ." on
On Mon, Apr 19, 2010 at 2:37 PM, Peter Lind <peter.e.lind(a)gmail.com> wrote:
> On 19 April 2010 14:24, Gary wrote:
>> On Mon, Apr 19, 2010 at 10:36 AM, Peter Lind wrote:

>>> So no, you shouldn't be able to do that.
>>
>> Okay. Why not?
>
> Hate to ask, but did you at any point consider to read the PHP docs on
> this? The bit I sent or what you could gather from the link posted?

Yes. The question remains.
From: "Gary ." on
On Mon, Apr 19, 2010 at 3:12 PM, Ashley Sheridan wrote:
> On 19 April 2010 14:24, Gary wrote:

> > Okay. Why not?
....
> Class constants must be defined with static values, not variables. They are constants after all! If they relied on the value of a variable, surely that would mean that their own value might change, so they would just become regular variables not constants.

Right. But in fact the only referenced values are *also* constant
(unless I'm completely misunderstanding the use of 'const'), so I
think it's a valid thing to want to do. I accept it doesn't seem to be
possible, I'm now curious as to the thinking behind it.

> Is there a specific reason that you need to try and achieve this?

Okay, well here's a more meaningful situation, perhaps:
class SomeTable
{
const TABLE_NAME = 'mytable';
const SELECT = 'SELECT * FROM ' . MyTable::TABLE_NAME;
const INSERT = 'INSERT INTO ' . MyTable::TABLE_NAME ...

If the table name should change for some reason, it is preferable to
make the change in one place in the code (i.e. the value of
TABLE_NAME), surely, than changing the name in the alternative, which
is something like:
class SomeTable
{
// const TABLE_NAME = 'mytable';
const SELECT = 'SELECT * FROM mytable';
const INSERT = 'INSERT INTO mytable...
From: Peter Lind on
On 19 April 2010 16:18, Gary . <php-general(a)garydjones.name> wrote:
> On Mon, Apr 19, 2010 at 2:37 PM, Peter Lind <peter.e.lind(a)gmail.com> wrote:
>> On 19 April 2010 14:24, Gary wrote:
>>> On Mon, Apr 19, 2010 at 10:36 AM, Peter Lind wrote:
>
>>>> So no, you shouldn't be able to do that.
>>>
>>> Okay. Why not?
>>
>> Hate to ask, but did you at any point consider to read the PHP docs on
>> this? The bit I sent or what you could gather from the link posted?
>
> Yes. The question remains.
>

Per the PHP manual: "The value must be a constant expression". Is
something that depends on other classes, variables or functions
constant?
If you're asking why a constant should be constant, I can only point
you to Ashleys answer or google.

Regards
Peter

--
<hype>
WWW: http://plphp.dk / http://plind.dk
LinkedIn: http://www.linkedin.com/in/plind
Flickr: http://www.flickr.com/photos/fake51
BeWelcome: Fake51
Couchsurfing: Fake51
</hype>
From: Adam Richardson on
On Mon, Apr 19, 2010 at 10:25 AM, Peter Lind <peter.e.lind(a)gmail.com> wrote:

> On 19 April 2010 16:18, Gary . <php-general(a)garydjones.name> wrote:
> > On Mon, Apr 19, 2010 at 2:37 PM, Peter Lind <peter.e.lind(a)gmail.com>
> wrote:
> >> On 19 April 2010 14:24, Gary wrote:
> >>> On Mon, Apr 19, 2010 at 10:36 AM, Peter Lind wrote:
> >
> >>>> So no, you shouldn't be able to do that.
> >>>
> >>> Okay. Why not?
> >>
> >> Hate to ask, but did you at any point consider to read the PHP docs on
> >> this? The bit I sent or what you could gather from the link posted?
> >
> > Yes. The question remains.
> >
>
> Per the PHP manual: "The value must be a constant expression". Is
> something that depends on other classes, variables or functions
> constant?
> If you're asking why a constant should be constant, I can only point
> you to Ashleys answer or google.
>
> Regards
> Peter
>
> --
> <hype>
> WWW: http://plphp.dk / http://plind.dk
> LinkedIn: http://www.linkedin.com/in/plind
> Flickr: http://www.flickr.com/photos/fake51
> BeWelcome: Fake51
> Couchsurfing: Fake51
> </hype>
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>
Hi Gary,

Sorry for the confusion. I understand your question. For the life of those
variables, they would never change If you come from other programming
language backgrounds, this can be a bit confusing. In Objective C, the term
"constant expression" is one in which every element is a constant, so given
the requirement that "The value must be a constant expression", your
examples would make sense. Additionally, in languages like Scala, values
default to a constant, and you can compose them in a myriad of ways.

I don't claim to know the rationale, but once you get used to it, it's not a
big deal. I just tend to use classes that allow a value to be set once and
only once for these types of situations.

Happy coding ;)

Adam

--
Nephtali: PHP web framework that functions beautifully
http://nephtaliproject.com
From: David Harkness on
On Mon, Apr 19, 2010 at 7:25 AM, Peter Lind <peter.e.lind(a)gmail.com> wrote:

> Per the PHP manual: "The value must be a constant expression". Is
> something that depends on other classes, variables or functions
> constant?
>

When I came up against this problem myself, I read "a constant expression"
to mean "an expression involving only constants". I think that's a fairly
reasonable parse of the phrase. Thus I expected to be able to combine other
constants using the dot operator as Gary is trying to do. Obviously, it
didn't work, and I removed the "base" constant and replicated its value in
the other constants--a situation constants were designed to obviate.

Gary, you'd probably be better off asking for the technical reason behind
this limitation on a -devel list. :)
--
David Harkness
Senior Software Engineer
High Gear Media, Inc.