On 02.06.2011, at 00:53, Marcel Esser wrote: > Hrm. It seems to me that it's not just Mongo that has chosen that as a > query definition language. A fair number of other projects have, too. If > not as a query language, then related things.
It's the worst idea of this decade, and just because others have repeated it,
it's not automatically a good one. {foo: 1, bar: 1} works fine, so they
implemented that, and then they realized that they had to do ORs as well, so
they invented $or and a whole bunch of other "workarounds".
> As for decoding Unicode, well, json_decode seems to do a pretty good job.
> And if I am not mistaken, they are always in quotation marks, so it
> shouldn't really be such a terrible issue to delimit as such. I am not
> certain about that, but, again, json_decode seems to manage.
json_decode() decodes to UTF-8.
What if I do this, in a latin1 encoded file:
$x = {foo: "ä", bar: "\u0123"}
Should that then give mixed encodings? The "ä" in foo in latin1 and the stuff
in bar in UTF-8?
And what if I do:
$x = {foo: "ä\u0123"}
I'll either end up with an invalid UTF-8 sequence, or with latin1 character
soup.
David
>
> - M.
>
> --
> Marcel Esser
>
> Vice President of Engineering, CROSCON
> +1 (202) 470-6090
> [email protected]
>
> Before printing this e-mail, please consider the rainforest.
>
>
>
>
> On 6/1/11 6:47 PM, "David Zülke" <[email protected]> wrote:
>
>> Just because the MongoDB developers were stupid enough to build a query
>> language on top of JSON does not mean that JSON or JavaScript object
>> literals need to be supported in PHP. And it wouldn't be possible anyway
>> since JSON allows Unicode escape sequences, and PHP cannot even represent
>> those as it is not aware of runtime encodings.
>>
>> Besides, outside the use case of json_decode(), stdClass is rarely ever
>> useful, so I don't understand why we're even discussing {} shorthands
>> here. It's not in the RFC either, so good job on focusing on the issue
>> and not diluting the discussion.
>>
>> Getting back to the RFC: I think it's problematic to have two separate
>> syntaxes for the key/value separator. For consistency's sake, I'd rather
>> just have "=>" but not ":". Just my $0.02.
>>
>> David
>>
>>
>> On 02.06.2011, at 00:09, John Crenshaw wrote:
>>
>>> For small linear arrays, neither format is "more readable" but for even
>>> mildly complex structures, there is a clear difference. Consider the
>>> following Mongo query:
>>>
>>> $query = array(
>>> 'time'=>array('$and'=>array(
>>> array('$gt'=>strtotime('-1 day')),
>>> array('$lt'=>time()),
>>> )),
>>> '$or'=>array(
>>> array('foo'=>'bar'),
>>> array('hello'=>'world')
>>> )
>>> );
>>>
>>> Vs. the JSON form:
>>> $query = {
>>> time: {'$and': [
>>> {'$gt': strtotime('-1 day')},
>>> {'$lt': time()},
>>> ]},
>>> '$or': [
>>> {foo: 'bar'},
>>> {hello: 'world'}
>>> ]
>>> };
>>>
>>> Because of the clear readability difference I'll take anything, but
>>> JSON would be much better than just an "array shorthand".
>>>
>>> John Crenshaw
>>> Priacta, Inc.
>>>
>>> -----Original Message-----
>>> From: Anthony Ferrara [mailto:[email protected]]
>>> Sent: Wednesday, June 01, 2011 5:18 PM
>>> To: PHP internals
>>> Subject: Re: [PHP-DEV] RFC: Short syntax for Arrays (redux)
>>>
>>> Personally, I think focusing on a character savings is the wrong
>>> reason to take on any problem. I don't care how long it takes for me
>>> to type code. I don't care how much extra hdd space it takes. But
>>> what I do care about is how readable it is.
>>>
>>> To me, the array shortcut syntax is pointless. Do you really mean to
>>> tell me that `[1, 2]` is more readable/easier to understand than
>>> `array(1,2)`? To me, it's about a wash.
>>>
>>> However, the object shortcut syntax is a major win. For example:
>>>
>>> $person = new stdClass();
>>> $person->city = 'ogden';
>>> $person->state = 'ut';
>>> $perspn->country = 'usa';
>>> $person->favoriteNumbers = array(4, 12, 37, 42);
>>> $person->somethingWithNumbers();
>>> $person->unluckyNumbers = array(6, 13, 21);
>>> $person->likesPhp = 'very much so';
>>>
>>> vs
>>>
>>> $person = { 'name' => 'Justin',
>>> 'city' => 'ogden',
>>> 'state' => 'ut',
>>> 'country' => 'usa',
>>> 'favoriteNumbers' => [ 4, 12, 37, 42],
>>> 'unluckyNumbers' => [ 6, 13, 21],
>>> 'likesPhp' => 'very much so'
>>> }
>>>
>>> Did you notice what happened there? There's two differences. Try to
>>> find them. Neither would be possible with the shortcut syntax.
>>>
>>> Now, the only reason I would personally support the array shortcut is
>>> if it was an implementation of JSON. I know that's not on the table
>>> here, but that's the only benefit I can see to implementing a shortcut
>>> for arrays (that would save 5 characters per instance).
>>>
>>> Just my $0.02...
>>>
>>> Anthony
>>>
>>> On Wed, Jun 1, 2011 at 5:02 PM, Justin Carmony
>>> <[email protected]> wrote:
>>>> To address the soapbox:
>>>>
>>>> Its not just to reduce the five characters at the beginning, but when
>>>> you have more complex structures as well. There was already a great
>>>> example shown
>>>> (http://paste.roguecoders.com/p/0747f2363c228a09e0ddd6f8ec52f2e8.html)
>>>> of that. Also, if object support is added (which we need to add to the
>>>> RFC), you can cut down on a lot more verbose code, especially with
>>>> objects.
>>>>
>>>> $person = { 'name' => 'Justin',
>>>> 'city' => 'ogden',
>>>> 'state' => 'ut',
>>>> 'country' => 'usa',
>>>> 'favoriteNumbers' => [ 4, 12, 37, 42],
>>>> 'unluckyNumbers' => [ 6, 13, 21],
>>>> 'likesPhp' => 'very much so'
>>>> };
>>>>
>>>> Characters: 192
>>>>
>>>> Current way:
>>>>
>>>> $person = new stdClass();
>>>> $person->city = 'ogden';
>>>> $person->state = 'ut';
>>>> $person->country = 'usa';
>>>> $person->favoriteNumbers = array(4, 12, 37, 42);
>>>> $person->unluckyNumbers = array(6, 13, 21);
>>>> $person->likesPhp = 'very much so';
>>>>
>>>> Characters: 229
>>>>
>>>> That is a 37 character difference. But the real driving factor is
>>>> given PHP's lack of named parameter syntax, passing objects and arrays
>>>> (or sometimes a mix, depending on the framework) is becoming very
>>>> popular. So not only do you save some typing just once, but if you use
>>>> this pattern a lot, you save a lot of typing over your entire project.
>>>> Also, when dealing with objects, I have to make sure I retype "person"
>>>> correctly each time. If I don't, I'll get a notice error. But with the
>>>> new syntax, it'll throw a parsing error so I can know a lot quicker
>>>> what my issue is.
>>>>
>>>> As for syntax highlighters, IDEs, books, etc all being outdated, first
>>>> off no one is suggesting to deprecate the array() function. So you will
>>>> only use this new syntax if you choose to do so. Second, we broke
>>>> syntax highlighters, IDEs, and so forth when we introduced namespaces,
>>>> and every IDE and syntax highlighter I used updated very quickly to
>>>> support them. I'm assuming the IDEs spent a great deal more time adding
>>>> Namespacing support than it will to support a short syntax for arrays
>>>> and objects.
>>>>
>>>> PHP has made short syntax for other things, such a if statement short
>>>> codes. Yet many books don't cover it, since it is one of those things
>>>> you read in the documentation later and decide "Do I want to use this?"
>>>> No one is forcing anyone to use (1 == 1 ? true : false) type of if/then
>>>> logic. The same will work with the new syntax.
>>>>
>>>> My two cents.
>>>>
>>>> Justin
>>>>
>>>> On Jun 1, 2011, at 2:37 PM, Michael Shadle wrote:
>>>>
>>>>> On Wed, Jun 1, 2011 at 1:01 PM, Pierre Joye <[email protected]>
>>>>> wrote:
>>>>>
>>>>>> I modified the vote page, pls move your votes to the desired syntax
>>>>>> (or global -1)
>>>>>
>>>>> This is a good idea to group things like this.
>>>>>
>>>>> Back on the soapbox. All of this is just to reduce typing "array" (5
>>>>> characters) before things?
>>>>>
>>>>> Old:
>>>>> $foo = array('a' => 'b', 'c' => 'd');
>>>>>
>>>>> More than likely new:
>>>>> $foo = ['a' => 'b', 'c' => 'd'];
>>>>>
>>>>> 5 character difference for each array being saved. That's it. At the
>>>>> expense of syntax highlighters, IDEs, books, all becoming outdated and
>>>>> need to be updated. For a language construct that has been around for
>>>>> what, 10 years?
>>>>>
>>>>> Oh, and for anyone desiring a ":" for this new shorthand, why stop at
>>>>> array shorthand. Why not change this from:
>>>>> foreach($foo as $key => $val)
>>>>>
>>>>> To:
>>>>> foreach($foo as $key: $val)
>>>>>
>>>>> That would save one character for each array iteration like that.
>>>>>
>>>>> Also - if we're worried about saving characters and shorthand why not
>>>>> just remove the "$" language construct? That's a LOT of keystrokes. In
>>>>> my WordPress install, that's 75,412 characters saved. Versus 6,960
>>>>> "array(" matches, which would save 34,800 characters.
>>>>>
>>>>> These were quick examples from a coworker. Just another PHP user who
>>>>> said "wait why would they make another way to express an array?"
>>>>>
>>>>> --
>>>>> PHP Internals - PHP Runtime Development Mailing List
>>>>> To unsubscribe, visit: http://www.php.net/unsub.php
>>>>>
>>>>
>>>>
>>>
>>> --
>>> PHP Internals - PHP Runtime Development Mailing List
>>> To unsubscribe, visit: http://www.php.net/unsub.php
>>>
>>>
>>> --
>>> PHP Internals - PHP Runtime Development Mailing List
>>> To unsubscribe, visit: http://www.php.net/unsub.php
>>>
>>>
>>
>
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>
smime.p7s
Description: S/MIME cryptographic signature
