Err typo correction: "Strong, on the other hand, would throw a fatal error if you attempted to pass an incompatible value to *a variable." (not "an array")
--Kris On Mon, Feb 27, 2012 at 11:15 AM, Kris Craig <kris.cr...@gmail.com> wrote: > Now, to rewind a bit past the latest chunk of "I hate this idea" posts.... > > I'd like to suggest a new term: "strong". > > This term would be similar to "weak", except with a few key differences: > > - Weak would behave very much like Arvids suggested in his earlier > post; i.e. if the variable is an integer but you pass a string (like "aaa") > to it, a warning would be thrown and PHP would attempt to convert it (i.e. > it would become 1). > - Strong, on the other hand, would throw a fatal error if you > attempted to pass an incompatible value to an array. Or, to put it another > way, if the "converted" value does not match the original value. For > example, if we're assigning "aaa" to an integer, that would convert to 1; > and, since "1" != "aaa", a fatal error would be thrown. On the other hand, > if you were to pass the string "1" to that integer variable, it would > convert to 1; and, since "1" == 1, there wouldn't be a problem. > - In both instances, if the converted value matches the original (i.e. > "1" == 1), no warning error would be displayed. Should it perhaps display > a notice though? Or no error at all? I can think of reasonable arguments > on both sides of that question. > > This new term would also make it easier for us to avoid using the term > "strict," which would explode even in the case of "1" == 1. > > Whether this should be done at the function level, the variable level, or > both is an open-ended question. > > > Some possible examples of how this would look: > > weak int $i = "aaa"; // Converts to 1 and throws a warning. > strong int $ii = "aaa"; // Throws a fatal error. > weak int $i = "1"; // Converts to 1. > strong int $ii = "1"; // Converts to 1. > > > --Kris > > > > On Mon, Feb 27, 2012 at 10:53 AM, Kris Craig <kris.cr...@gmail.com> wrote: > >> +1 what Anthony said. >> >> Guys, seriously. Some of these responses have been downright rude and >> inappropriate for a constructive dialogue. Please do not pollute this >> thread with cliche, "Just find another language and get out!" posts. It >> doesn't add anything to the conversation and instead just creates needless >> anger and animosity. It's immature and just makes it look like we're >> incapable of having a rational discussion. >> >> So, let me outline a list of "arguments" that will carry ZERO weight on >> this thread: >> >> - "If you don't like PHP as it is, goto Java (or some other >> language)!" >> - "We've already talked about this before. Therefore, we must never >> speak of it again." >> - "This is impossible. Why? Because I said so. You want evidence? >> Fuck you." >> - "But this would require significant changes to the core source >> code! We'd never be able to find enough sacrificial penguins to appease >> the gods!" >> - "Anyone who likes this idea is either stupid or not a 'true' PHP >> developer." >> - "If you disagree with me, it means you haven't done your homework >> because I'm always right." >> - "Strict typing would break everything! What? You're not talking >> about C-like strict typing? Sorry, I didn't catch that. Strict typing >> would break everything!...." >> - "I don't care if you've already countered my argument. I'll just >> keep repeating myself as if you didn't." >> >> >> Variations of the above statements have been posted ad nauseum. They're >> all based on logical fallacies and are not constructive. >> >> I'm putting this out there: If anyone posts one or more of the above >> arguments yet again on this topic, I will personally extract one of your >> kidneys and sell it to a questionable "dog food" company in Shanghai. I >> will then openly mock your intellectual laziness and encourage people to >> ignore you. ;P >> >> >> I'd love to prove Daniel wrong, but I think he may be on to >> something.... :\ >> >> --Kris >> >> >> >> On Mon, Feb 27, 2012 at 9:38 AM, Anthony Ferrara <ircmax...@gmail.com>wrote: >> >>> > no, it is: "come back after you did your homework, and you can provide >>> new >>> > arguments to the discussion" >>> >>> >>> To be completely fair, I did homework on this. I went back to 2000 on >>> marc.info's archives and read almost all of the 400 posts matching the >>> search http://marc.info/?l=php-internals&w=2&r=13&s=strict+typing&q=b >>> and a bunch of the posts on >>> http://marc.info/?l=php-internals&w=2&r=54&s=type+hinting&q=b >>> >>> The vast majority of what I found were quite good arguments for >>> including the feature. I found quite a bit of "this was discussed to >>> death, do your homework and provide new arguments". What's odd, is >>> that one of the earliest on-topic threads that I found (2007: >>> http://marc.info/?l=php-internals&m=119514660125258&w=2 ) had this as >>> the third reply. The only on-topic discussion that I found prior to >>> that was in 2006 (almost exactly 1 year prior: >>> http://marc.info/?l=php-internals&m=116257685415135&w=2 ). >>> >>> Discussed to death. Yet only one time before (discussing a specific >>> patch)... >>> >>> And the opponents still said no... >>> >>> There were also quite a few problems identified with scalar hinting >>> and auto-casting vs strict erroring. However, there were also >>> solutions proposed to nearly each and every one of them. >>> >>> And the opponents still said no... >>> >>> It has been brought up time and time again. Solutions have been >>> proposed which have no fundimental issues (inconsistencies, >>> problematic operations - such as references, etc)... >>> >>> And the opponents instead said "this has been discussed to death, no"... >>> >>> Please can you stop saying "this has been discussed to death". To be >>> frank, don't stop the discussion because you don't like the idea. It >>> has been discussed to death. But the discussion has only really ever >>> involved people who are for it. The opponents by and large have used >>> two arguments: "It has been discussed already, so no" and "don't make >>> PHP into Java". >>> >>> There has been some discussion of technical merit and problem >>> resolution by opponents, but finding it is VERY difficult among all >>> the down trodding commentary. >>> >>> So let me make a plea: >>> >>> If you don't like this feature, and you can explain from a TECHNICAL >>> perspective why, please do so! If you don't like the feature, and are >>> going to lean on "It's not Java", or "We've discussed this to death >>> already", please don't... >>> >>> >>> >>> And to be fair: "and you can provide new arguments to the discussion" >>> has already happened quite a bit (dating back the past 5 years), but >>> those arguments were ignored or overruled for political reasons. >>> >>> >>> Anthony >>> >>> >>> On Mon, Feb 27, 2012 at 11:55 AM, Ferenc Kovacs <tyr...@gmail.com> >>> wrote: >>> > On Mon, Feb 27, 2012 at 5:16 PM, Michael Morris < >>> dmgx.mich...@gmail.com>wrote: >>> > >>> >> So the official response is "get lost"? >>> >> >>> >> >>> > no, it is: "come back after you did your homework, and you can provide >>> new >>> > arguments to the discussion" >>> > >>> > >>> > >>> >> I don't know about the internals implications. But from an external >>> >> API standpoint I see no problem in allowing programmers who want to >>> >> strictly enforce a variable's datatype to do so. Legacy code would >>> >> not be affected unless it was trying to use the new reserved word >>> >> "strict" >>> >> >>> >> >>> > it was discussed before, strict typing tends to be "viral", in the >>> sense >>> > that the developer using a lib which enforces method signatures using >>> type >>> > hinting can either: >>> > - write a lot of boiler plate code to make sure that he/she is passing >>> the >>> > expected types (notice that strict typing would pass that burden to >>> the api >>> > consumer, which is against the Generous on input, strict on output >>> > paradigm, plus it would generate much more work, as there are always >>> more >>> > consumers than producers) >>> > - or simply passing those requirements up in the call chain, which is >>> less >>> > work, but affects even more code, and in the end, turns the whole app >>> into >>> > strict typing. >>> > >>> > -- >>> > Ferenc Kovács >>> > @Tyr43l - http://tyrael.hu >>> >>> -- >>> PHP Internals - PHP Runtime Development Mailing List >>> To unsubscribe, visit: http://www.php.net/unsub.php >>> >>> >> >