其他语言层面变更
1. 移除在$this产生歧义的上下文中,对静态方式调用非静态方法的支持.
以下情景, $this不再被定义, 虽然允许调用但会产生一个deprecation notice错误:
class A {
public function test() { var_dump($this); }
}
// Note: Does NOT extend A
class B {
public function callNonStaticMethodOfA() { A::test(); }
}
(new B)->callNonStaticMethodOfA();
// Deprecated: Non-static method A::test() should not be called statically
// Notice: Undefined variable $this
NULL
注意, 这里只适用于有歧义的上下文. 如果class B继承于A, 则允许调用且没有任何提示.
2. 以下保留字不再允许被用作类/接口/trait名称(大小写不敏感):
bool
int
float
string
null
false
true
规则适用于类/接口/trait声明, class_alias() 与 use语句.
并且, 以下类/接口/trait名称被留待未来使用, 当前使用时尚不会抛出错误, 但不建议使用
resource
object
mixed
numeric
3. yield语言结构变更, 现在为右关联运算符, 优先级介于 "print" 与 "=>". 表达式中的yield不再需要圆括号.
变更会导致某些场景下行为与之前不一致:
echo yield -1;
// Was previously interpreted as
echo (yield) - 1;
// And is now interpreted as
echo yield (-1);
yield $foo or die;
// Was previously interpreted as
yield ($foo or die);
// And is now interpreted as
(yield $foo) or die;
以上cases都可以通过添加额外的圆括号来避免歧义.
4. 其他变更
- 移除ASP (<%) 与 script (