Prepare for PHP 6

As you may be aware the core PHP group of developers all met in Paris on November the 11th and 12th 2005. The minutes from the meeting are fascinating reading, but there is a lot to go through. So I've gone through all of the points raised and chewed them over from a developers point of view. Your comments as always are welcome.

Before I get started however I'd just like to make one thing very clear: what you read here (or in the original minutes) are in no way the 'fully 100% decided' end results / changes that we'll see in PHP6. They will most likely all be discussed further (on internals and wider), but even so we can take the information presented in the minutes as being the PHP teams most 'current' way of thinking about any given subject.

Unicode

Unicode support at present can be set on a per request basis. This equates to PHP having to store both Unicode and non-Unicode variants of class, method and function names in the symbol tables. In short - it uses up more resources. Their decision is to make the Unicode setting server wide, not request wide. Turning Unicode off where not required can help performance and they quote some string functions as being up to 300% slower and whole applications 25% slower as a result. The decision to move it to the php.ini in my mind does take the control away from the user, and puts it into the hands of the Web Host.

If you compile PHP yourself or are responsible for this on your servers then you may be interested to know that PHP 6 will require the ICU libs (regardless if Unicode is turned on or off). The build system will bail out if the required ICU libs cannot be found. In a nutshell, you'll have another thing to install if you want to compile PHP.

Register Globals to go

Say goodbye folks, this one is finally going. It will no longer be an ini file setting, and if found it will raise an E_CORE_ERROR, pointing you to the documentation on why it's "bad". This means that PHP6 will finally break all PHP3 era scripts (or any script using reg globals) with no recourse at all but to re-code it. That's a bold move, but a needed one.

Magic Quotes to go

The magic quotes feature of PHP will be going, and as with register globals it's going to raise an E_CORE_ERROR if the setting is found anywhere. This will affect magic_quotes, magic_quotes_sybase and magic_quotes_gpc.

Safe Mode to go

This may please developers who have web hosts that insist upon safe mode! But it will now go totally, again raising an E_CORE_ERROR if found. The reason is that apparently they felt it gave the 'wrong signal', implying that it made PHP secure, when infact it didn't at all. open_basedir will (thankfully) be kept.

'var' to alias 'public'

PHP4 used 'var' within classes. PHP5 (in its OO move) caused this to raise a warning under E_STRICT. This warning will be removed in PHP6 and instead 'var' will mean the same thing as 'public'. This is a nice move but I if anyone has updated their scripts to work under E_STRICT in PHP5 it will be a redundant one for them.

Return by Reference will error

Both '$foo =& new StdClass()' and 'function &foo' will now raise an E_STRICT error.

zend.ze1 compatbility mode to go

ze1 always tried to retain old PHP4 behaviour, but apparently it "doesn't work 100%" anyway, so it will be removed totally and throw an E_CORE_ERROR if detected.

Freetype 1 and GD 1 support to go

Support for both of these (very very old) libs will be removed.

dl() moves to SAPI only

Each SAPI will register the use of this function as required, only the CLI and embed SAPIs will do this from now on. It will not be available elsewhere.

FastCGI always on

The FastCGI code will be cleaned up and always enabled for the CGI SAPI, it will not be able to be disabled.

Register Long Arrays to go

Remember the HTTP_*_VARS globals from yesteryear? Well if you're not already using $_GET, $_POST, etc - start doing so now, because the option to enable long arrays is going (and will throw an E_CORE_ERROR).

Extension Movements

The XMLReader and XMLWriter extensions will move into the core distribution and will be on by default.

The ereg extension will move to PECL (and thus be removed from PHP). This means that PCRE will not be allowed to be disabled. This will make way for the new regular expression extension based on ICU.

The extremely useful Fileinfo exntesion will move into the core distribution and enabled by default.

PHP Engine Additions

64 bit integers
A new 64 bit integer will be added (int64). There will be no int32 (it is assumed unless you specify int64)

Goto
No 'goto' command will be added, but the break keyword will be extended with a static label - so you could do 'break foo' and it'll jump to the label foo: in your code.

ifsetor()
It looks like we won't be seeing this one, which is a shame. But instead the ?: operator will have the 'middle parameter' requirement dropped, which means you'd be able to do something like this: "$foo = $_GET['foo'] ?: 42;" (i.e. if foo is true, $foo will equal 42). This should save some code, but I personally don't think it is as 'readable' as ifsetor would have been.

foreach multi-dim arrays
This is a nice change - you'll be able to foreach through array lists, i.e. "foreach( $a as $k => list($a, $b))".

{} vs []
You can currently use both {} and [] to access string indexes. But the {} notation will raise an E_STRICT in PHP5.1 and will be gone totally in PHP6. Also the [] version will gain substr and array_slice functionality directly - so you could do "[2,]" to access characters 2 to the end, etc. Very handy.

OO changes

Static Binding
A new keyword will be created to allow for late static binding - static::static2(), this will perform runtime evaluation of statics.

Namespaces
It looks like this one is still undecided - if they do implement namespaces it will be using their style only. My advice? Don't hold your breath!

Type-hinted Return Values
Although they decided against allowing type-hinted properties (becaue it's "not the PHP way") they will add support for type-hinted return values, but have yet to decide on a syntax for this. Even so, it will be a nice addition.

Calling dynamic functions as static will E_FATAL
At the moment you can call both static and dynamic methods, whether they are static or not. Calling a dynamic function with the static call syntax will raise an E_FATAL.

Additions to PHP

APC to be in the core distribution
The opcode cache APC will be included in the core distribution of PHP as standard, it will not however be turned on by default (but having it there saves the compilation of yet another thing on your server, and web hosts are more likely to allow it to be enabled)

Hardened PHP patch
This patch implements a bunch of extra security checks in PHP. They went over it and the following changes will now take place within PHP: Protection against HTTP Response Splitting will be included. allow_url_fopen will be split into two: allow_url_fopen and allow_url_include. allow_url_fopen will be enabled by default. allow_url_include will be disabled by default.

E_STRICT merges into E_ALL
Wow, this is quite a serious one! E_STRICT level messages will be added to E_ALL by default. This shows a marked move by the PHP team to educate developers on 'best practises' and displaying language-level warnings in a "Hey, you're doing it the wrong way".

Farewell <%
They will remove support for the ASP style tags, but the PHP short-code tag will remain (<?) - so to those on php general who reckon the short-tag is 'depreceated' - hah! 

The Bombay High Court directed Reliance Industries to supply gas to a former group firm at about half the government-approved price, sending its shares sliding more than 7 percent.

The Bombay High Court on Monday asked Reliance to supply 28 million metric cubic metres a day for 17 years at $2.34 per million metric British thermal unit to Reliance Natural Resources, Mahesh Jethmalani, a lawyer for Reliance Natural, said.

On Jan. 30, the court had issued an interim order saying Reliance Industries was allowed to sell gas at government- approved price of $4.2 per million metric British thermal units from its KG-D6 block in the Krishna Godavari basin, off eastern India.

 

Must Watch dudes

General Motors Corp filed for America's largest-ever industrial bankruptcy on Monday.

Heralding a new and uncertain era for the No. 1 U.S. automaker, the company filed for Chapter 11 bankruptcy protection at the U.S. Bankruptcy Court in the Southern District of New York before the start of trading.

The following are key events in GM's history, including major deals and alliances by the No. 1 U.S. automaker.

1908 - GM founded in Flint, Michigan.

1919 - GM creates captive finance arm, GMAC.

1929 - GM buys 80 percent stake in European Adam Opel AG.

1937 - After a bitter strike, GM recognizes the United Auto Workers (UAW) as the bargaining representative for its hourly workers.

1971 - GM buys 34.2 percent of Isuzu Motors Ltd. GM raises stake to 49 percent in 1998 and later sells it.

1981 - GM buys about 5 percent of Suzuki Motor Corp. It raises the stake to 20 percent in 2000, and later sells all but 3 percent.

1981 - GM and Toyota Motor Corp form a joint venture, known as NUMMI, to build cars in Fremont, California.

1986 - GM acquires British sports car maker Lotus. It sold Lotus in 1993.

1990 - GM buys a 50-percent stake in Sweden's Saab and purchases the remaining half a decade later.

1990 - GM launches Saturn.

1998 - A 56-day strike at GM's Flint stamping operations shuts all of GM's North American assembly plants.

1999 - GM buys 20 percent of Subaru-maker Fuji Heavy Industries Ltd. GM later sells all of the stake. 1999 - GM spins off partsmaker Delphi Corp. Delphi's U.S. operations enter Chapter 11 reorganization in 2005, where they remain.

2000 - GM decides to kill the Oldsmobile brand. 

2000 - GM buys 20 pct of Italy's automaker Fiat for $2.4 billion in GM stock. The deal includes a "put" option that gives Fiat SpA the right to force GM to buy the remainder of the Italian automaker.

2002 - GM signs deal to buy most of Daewoo Motor Co.

2005 - GM pays $2 billion to Fiat to cancel "put" option under its deal and buy its way out of the alliance.

2007 - GM signs deal with the UAW, which includes shifting GM's retiree health care liabilities to an independent trust.

June 2008 - GM puts Hummer brand on review, ahead of a possible sale.

July 2008 - GM announces plans to cut costs by $10 billion and raise $5 billion through borrowing and asset sales.

Sept 2008 - GM and Chrysler holds talks to combine companies. GM sets aside talks in November to focus on preserving cash.

Nov 2008 - GM warns its liquidity will fall short of the minimum needed to run its business by the first half of 2009.

Dec 2, 2008 - GM seeks U.S. government aid of up to $18 billion.

Dec 19, 2008 - GM and Chrysler granted $17.4 billion in government loans.

Jan 21, 2009 - Toyota Motor Corp surpasses GM as the world's largest automaker for the first time.

Feb 5, 2009 - GM announces plan to slash its global salaried workforce by about 10,000, or 14 percent and cut the pay of most remaining white-collar U.S. workers.

Feb 17, 2009 - GM raises U.S. funding request to a total of $30 billion, announces plans to cut global workforce by 47,000 and close five U.S. plants by 2012.

Feb 26, 2009 - GM posts 2008 loss of $30.9 billion.

March 5, 2009 - GM's auditors raise "substantial doubt" about its ability to survive outside bankruptcy.

March 30, 2009 - GM Chief Executive Rick Wagoner ousted by U.S. government, replaced by Chief Operating Officer Fritz Henderson. Company also given 60 days to develop new restructuring plan.

April 17, 2009 - GM says readying detailed plans for bankruptcy filing as it races to complete a business plan under federal oversight.

April 22, 2009 - GM says unlikely to make a $1 billion debt payment due June 1.

April 27, 2009 - GM offers final plan to reorganize outside bankruptcy by slashing bond debt, cutting over 21,000 more U.S. jobs and emerging as a nationalized automaker. GM warns it would file for bankruptcy if an offer to exchange bonds for company equity failed to cut $27 billion in debt by about 90 percent of bondholders.

May 5, 2009 - GM details plans to all but wipe out the holdings of remaining shareholders by issuing up to 60 billion new shares in a bid to pay off debt to the U.S. government, bondholders and the UAW.

May 7, 2009 - GM posts a first-quarter net loss of $6 billion and a cash burn of $10.2 billion.

May 15, 2009 - GM announces plans to drop 1,100 of its smaller, less-profitable dealerships.

May 21, 2009 - GM announces a new cost-saving labor agreement with the UAW, under which UAW-aligned healthcare trust will receive half of the $20 billion debt GM owes the fund in the form of stock and new debt, instead of cash.

May 22, 2009 - GM borrows another $4 billion from the U.S. Treasury and reaches deal with Canadian auto workers.

May 27, 2009 - GM's offer to exchange $27 billion in bond debt for a 10 percent stake in a reorganized company fails.

May 28, 2009 - GM and the U.S. Treasury make new equity exchange offer under which bondholders would be offered 10 percent of a reorganized company and given warrants to purchase another 15 percent.

June 1, 2009 - GM files for Chapter 11 bankruptcy protection at the U.S. Bankruptcy Court in the Southern District of New York.