Iāve come up with a whole load of ideas over the months, Iām sure many of you will have reasons I havenāt thought of why they might be bad:
[list][]Unicode
[]Namespaces ( using :: )
[]Type hinted return types (only on interfaces for now)
[]Namespace visibility?
[]Class visibility
[]Proper getter/setter methods ala C# et al, maybe something like this:
public $someProp {
get {
}
set ($value) {
}
}
[]Closures
[]Deprecate, where possible, badly named functions such as call_user_func_array(), keep them on as aliases but come up with better standardized names. is_string() should be isString() for a start; inline with isSet().
[]Built in support for improving code testability? Mocks as part of SPL perhaps.
[]Completely remove @
[*]Parametrized cloning
$a = new SomeClass();
$b = clone $a('Foo', 'Bar');
[]const keyword work in any scope and deprecate define()
[]isset augmented to replace defined()
[]method and function overloading
[]āobjectā type hint - manual claims it exist; it donāt 
[]Late binding statics
[]Might be nice to disallow declaration of non-uppercase constants
[*]augment list() to get from keys
function returnsAssoc()
{
return array('foo' => 1, 'bar' => 2);
}
list('foo' => $gir, 'bar' => $zim) = returnsAssoc();
$gir; // 1
$bar; // 2
[*]Type hinting arrays of things
public function someMethod(stdClass array $param) {
// $param must be an array of stdClasses
}
[]New decorates keyword, dynamically add behaviour to an object with another class using late binding.
[]static variables inside methods arenāt static to the class as well
[*]Pipe dream: Remove dollar syntax for everything dynamic variables/constants. Use {} in heredoc and double-quoted strings. e.g.
foo = 1;
const BAR = 2;
echo "foo has value of {foo} and BAR has value of {BAR}";
zim = 'foo';
echo $zim; // 1
class SomeClass
{
static public foo = 1;
public gir = 3;
const BAR = 2;
}
SomeClass::foo; // 1
SomeClass::$zim; // 1
SomeClass::BAR; // 2
dynamicConst = 'BAR';
SomeClass::$dynamicConst; // 2
SomeClass::gir; // illegal non-static
inst = new SomeClass();
inst->gir; // 3
zim = 'gir';
inst->$zim; // 3
inst->{$zim}; // 3
inst->{'gir'}; // 3
{'zi' . 'm'}; // gir
inst->BAR; // illegal static
[/list]