Wednesday, October 29, 2008

Ideas for php extension/mod

I am considering different ways in which I could modify php to make it more to my liking. My biggest "want" is probably "code blocks"/functions which can be passed to functions which require a body and NOT having them be strings i.e.

xR(1,100)->reduce({$x,$y | $x*$y});

xR(1,100)->reduce([$x,$y | $x*$y]);

funcname($arg1)[$x | echo $x];

Which would be more of a smalltalk/ruby approach. i like the idea of using { } as it is used through out the language to denote blocks. However, I would also like to see a python/javascript notation for arrays/objects/dictionaries i.e.
[1,2,3,4,5,10] is an array and {a:1,b:23} is an associative array/dictionary. The obvious issue is that { } being used for code blocks and dictionaries would be hard to parse. As I am typing aloud I think that perhaps the | in the code block would suffice but what about code blocks with no parameters? One idea which has occured to me would be to use ( ) for code blocks. i.e.

xR(1,100)->reduce(($x, $y | $x*$y));

Another nice thing would be having keyword paramaters but with json that become easy with an object i.e.

functionName({parama:$a,paramb:$b});

but wouldnt:

functionName(parama:$a, paramb:$b);

I guess thats more python esque.

I mean shit while we're at it lets get rid of -> notation and use. instead so now we have and allow an "implicit code block" to be passed in..:

xR(1,100).reduce($x,$y | $x*$y);

Also I would be implementing most of my hash class "natively" so that all arrays become hash objects with all the methods available so stuff like

[1,2,3,4,5].reduce($x,$y | $x*$y); is applicable as is 'this is a string '.trim().replace('a','b').split(' '); etc.

Numbers could be objects too
1.times(2);