$a{} stuff

php.internals

Derick Rethans

22 years ago
Hello, due to a little discussion on IRC I noticed that the following code works: <?php $a = "foobar"; $a{strlen($a)-1}; ?> now IMO the offset should only be a simple integer value, as this is a little bit too much magic to me (and perlish). Although the code above can have it's use, the following does also work fine: file1.php <?php return 4; ?> file2.php <?php $a = "foobar"; echo $a{include 'file1.php'}; ?> echos 'a'. I think this sideeffect should be disallowed as it adds a lot of unreadableness to code. (I do als vagely remember a discussion a year or something ago which resulted in something like "the offset to a string should be an integer only, and not for example {1..4} or {-1}". Can't find this though in the archives. regards, Derick

Rasmus Lerdorf

22 years ago
On Sat, 3 Jan 2004, Derick Rethans wrote:
> I think this sideeffect should be disallowed as it adds a lot of > unreadableness to code. (I do als vagely remember a discussion a year or > something ago which resulted in something like "the offset to a string > should be an integer only, and not for example {1..4} or {-1}". Can't > find this though in the archives.
That's a different argument. {1..4} and {-1} both introduce new concepts. I see no reason why {} cannot contain exactly the same things that [] can contain today. And if suddenly [] could only contain integers pretty much every PHP script I have ever written would break. The whole point of {} is to explicitly differentiate an string index from an array index. How that index is specified inside the braces shouldn't differ from one to the other. -Rasmus

Edin Kadribasic

22 years ago
On Saturday, Jan 3, 2004, at 22:35 Europe/Copenhagen, Derick Rethans wrote:
> Hello, > > due to a little discussion on IRC I noticed that the following code > works: > > <?php > $a = "foobar"; > $a{strlen($a)-1}; > ?> > > now IMO the offset should only be a simple integer value, as this is a > little bit too much magic to me (and perlish).
What is a "simple integer value"? You mean only to allow integer constants here? How are you supposed to process a string char by char without some sort of calculation of string offset? Edin