Re:An Exceptional Change in PHP 7.0
by sarciszewski on Monday October 05, 2015 @08:35PM
(#10336041)
Amusingly, after months of pointless bikeshedding, we managed to convince the internals team to throw an exception during the extreme case of a CSPRNG failure.
Re:An Exceptional Change in PHP 7.0
by debacle on Tuesday October 06, 2015 @09:19AM
(#10338635)
We need more BC breaks, not fewer. I'd really like to see a lot of functions that return FALSE on failure throw exceptions in the future. We could also tidy up the stdlib a bit and give primatives some OO love.
If you're going to break BC, might as well do it right.
Re:An Exceptional Change in PHP 7.0
by wvenable on Monday October 05, 2015 @06:00PM
(#10335313)
PHP is much more of a static language than a dynamic one. Therefore it has more in common with Java/C++ than with Python, Ruby, or JavaScript. It's also a very pragmatic choice for an OO system.
Re:An Exceptional Change in PHP 7.0
by vruiz on Monday October 05, 2015 @06:06PM
(#10335356)
PHP wasn't always what it is now, that's OPs point. They are where they chose to go. Probably in the search of legitimacy, they chose to follow the most enterprisey language.
Re:An Exceptional Change in PHP 7.0
by Someone1234 on Monday October 05, 2015 @06:11PM
(#10335377)
But you, like the OP, fail to communicate exactly WHY this is a bad thing. You just take it for granted that your point stands on its own without an explanation.
Re:An Exceptional Change in PHP 7.0
by KennyCason on Monday October 05, 2015 @09:39PM
(#10336279)
Exactly. I've seen beautifully written Java and I've seen (and written) ugly Java. The language syntax is by far the least contributing factor to the 'prettiness' of the code. With the exception of BF. :)
Re:An Exceptional Change in PHP 7.0
by agumonkey on Monday October 05, 2015 @07:14PM
(#10335674)
Indeed, a few years ago Paul Biggar (CircleCI) tried to compile PHP extensively and said it was far too dynamic to do "good" compilation (I'm distorting his words a lot here).
Re:An Exceptional Change in PHP 7.0
by kodablah on Monday October 05, 2015 @06:10PM
(#10335372)
It has been picked for a long time now, so it is hard to put yourself in the heads of the designers at that time. Having said that, PHP OO (like C#, ActionScript, etc at that time) was probably inspired by Java for pragmatic reasons.
Re:An Exceptional Change in PHP 7.0
by wvenable on Monday October 05, 2015 @05:55PM
(#10335281)
The backslash is the namespace separator. This just indicates that these classes are in the root namespace. This is the same as prefixing :: in front of C++ class names.
Re:An Exceptional Change in PHP 7.0
by wvenable on Monday October 05, 2015 @06:35PM
(#10335513)
PHPs design and grammar precluded using any of the other existing operators. The backslash is really the best choice and in practice it works pretty well. The actual debate on the separator choice was very very very long.
Re:An Exceptional Change in PHP 7.0
by sarciszewski on Monday October 05, 2015 @10:21PM
(#10336401)
You're the exception, not the rule.
I mostly hear C/C++, Ruby, Python, etc. devs complain about PHP. Very rarely actual PHP developers.
And typically, their complaints are less of the moan-ass "waaah, they use a \ for namespace separation" and more "ugh, why don't they disabled emulated prepared statements by default"?
Re:An Exceptional Change in PHP 7.0
by ufo on Monday October 05, 2015 @09:48PM
(#10336318)
I skimmed through it but couldn't really understand why they couldn't coopt one of the existing operators (for example, by making classes have a namespace for their methods)
Couldn't they provide a clearer explanation than simply dumping a huge IRC log like that??
Re:An Exceptional Change in PHP 7.0
by wvenable on Monday October 05, 2015 @10:34PM
(#10336442)
Basically namespaces operate at a different level. You can almost imagine it like Macro expansion -- the namespaces are fully resolved for all the symbols in the file and then the compilation happens. This is necessary for a host of reasons. They can't co-opt an existing operator because all the existing operators work at an entirely different level.
Re:An Exceptional Change in PHP 7.0
by dguaraglia on Monday October 05, 2015 @06:33PM
(#10335499)
Heh, I was wondering the same. As others have pointed out, it looks like it's the namespace separator. Now someone has to explain why on Earth you need the namespace separator if these class names are already in the namespace?
PHP has an incredible knack for almost copying other languages' features, but making them uglier in some random way, for no particular added benefit.
Re:An Exceptional Change in PHP 7.0
by wvenable on Monday October 05, 2015 @06:42PM
(#10335538)
> Now someone has to explain why on Earth you need the namespace separator if these class names are already in the namespace?
You don't. This is just illustrating these classes are in the global namespace.
> PHP has an incredible knack for almost copying other languages' features, but making them uglier in some random way, for no particular added benefit.
Well you have a case for "no added benefit" typically they aren't ugly for a random reason. There's a lot of very necessary reasons for the way these things work while making a language which is still PHP. PHP isn't precompiled. PHP has autoloading of classes. PHP allows code to be imported into other code. Combining namespaces with all the other existing features isn't an easy task.
Re:An Exceptional Change in PHP 7.0
by lucio on Monday October 05, 2015 @07:27PM
(#10335725)
if you do not include the namespace separator, and you import a namespace with the same name defined, you'll have a not-so-pleasant surprise. e.g.:you use "Exception" to catch all exceptions, and someone defines "SQL\Exception", then you import "SQL", and now all your catch blocks stop working. But don't worry. This is business as usual in the PHP world.
Re:An Exceptional Change in PHP 7.0
by kijin on Monday October 05, 2015 @10:40PM
(#10336456)
Modern PHP code rarely uses the global namespace, so almost everyone who cares about correct handling of the new exceptions will have to prefix them with a backslash anyway.
Re:An Exceptional Change in PHP 7.0
by sadgit on Monday October 05, 2015 @06:26PM
(#10335460)
Both the LogicException and the RuntimeException branches seem kind of pointless... They all describe exceptions that happen with values at runtime and I expect I'd have trouble picking one in a given circumstance. Mostly I see it leading to a lot of inconsistent uses in practice. At least 4 of them would be legitimate choices for a string thats too short, for example.
Re:An Exceptional Change in PHP 7.0
by debacle on Monday October 05, 2015 @09:53PM
(#10336327)
The logic behind the difference is in the fact that PHP doesn't have assertions - the naming is based on the root cause, not when the occur.
A RuntimeException is something like "Database connection failed." A LogicException is an implementation issue (e.g. usually requires a code change to fix).
https://www.sammyk.me/security-changes-to-the-php-7-csprng-i...
You can read my arguments on the mailing list, but basically it amounted to:
If random_int() returned FALSE, $password would be the string 'aaaaaaaaaaaa' (and you'd have 12 E_WARNING errors in your log).By making it an exception, random_int() will now fail closed (kill the script by default), but the developer can still handle it gracefully.
Or something similar.Is it a BC break? Sure. Is it worth it? Oh yeah.
If you're going to break BC, might as well do it right.
I mean, hating PHP for copying Java OO model in 2004? Com'on... It's not like PHP ever wanted to be a fancy language.
EDIT: Apparently PHP5 was released in 2004, not 2003.
EDIT2: One thing PHP got right over Java: type-hinted parameters are not nullable by default. NullPointerException anyone?
Why NOT Java?
Since I don't have to use PHP I'm not too upset. I was really just lamenting the state of the world.
PHP is heavily based on C so choosing to make it's OOP features like C++ isn't a big leap.
Plus PHP is still far less enterprisey than Java so maybe the OO model isn't the real issue.
/s
Zend has made a lot of good decisions (and a few painful but livable bad ones) over the last decade.
Who knows, perhaps it's one of the biggest reasons they're so successful, however much we who know better dislike that.
People who like to complain about PHP are rarely the same people who use it every day.
I mostly hear C/C++, Ruby, Python, etc. devs complain about PHP. Very rarely actual PHP developers.
And typically, their complaints are less of the moan-ass "waaah, they use a \ for namespace separation" and more "ugh, why don't they disabled emulated prepared statements by default"?
Only one side is constructive.
Typically, their complaints are about the ugly appearance and smell.
Only one side is constructive.
https://wiki.php.net/_media/rfc/php.ns.txt
Linked to at the bottom of:
https://wiki.php.net/rfc/namespaceseparator
Couldn't they provide a clearer explanation than simply dumping a huge IRC log like that??
But you get used to that kind of stuff writing PHP. At least Facebook is making things better.
PHP has an incredible knack for almost copying other languages' features, but making them uglier in some random way, for no particular added benefit.
(I know, I'm a hater... but seriously, why?)
You don't. This is just illustrating these classes are in the global namespace.
> PHP has an incredible knack for almost copying other languages' features, but making them uglier in some random way, for no particular added benefit.
Well you have a case for "no added benefit" typically they aren't ugly for a random reason. There's a lot of very necessary reasons for the way these things work while making a language which is still PHP. PHP isn't precompiled. PHP has autoloading of classes. PHP allows code to be imported into other code. Combining namespaces with all the other existing features isn't an easy task.
Ah, PHP.
A RuntimeException is something like "Database connection failed." A LogicException is an implementation issue (e.g. usually requires a code change to fix).