金沙上线 7.1.中更多即将到来的功能:速度令人印象深刻
金沙上线 7.1.中的更多即将到来的功能

金沙上线 7.1.中的更多即将到来的功能

这是我们在金沙上线 7.1中的最后一个功能的第二部分。看 '即将到来的金沙上线 7.1(A部分)' 和‘金沙上线 7.1.中的更多即将到来的功能(b部分)‘ and ‘金沙上线 7.1.中的最后一个特征(第C部分)

金沙上线 7.1.已经是Beta 3,因为我们’编写,并应在2016年11月(或关闭)的某处释放。我们现在正在提出批量金沙上线 7.1在金沙上线 7.0之上的堆积。

 

可用的类型

上周,我们介绍了新的空虚返回类型:唐的方法’T返回任何内容可能会用它作为返回类型。但是,函数可能会返回null或其他东西,就像旧的strpos()?这是新的可用类型功能。

类型提示,返回和参数,获取一个新选项,允许为null或提到的类型。这是这样的工作:

<?php
function foo(): ?int  {
    return null; //ok
    return 3;    //ok
    return "3";  //not ok, sometimes
    return "ko"; //never OK, as it can't be cast to a integer
}
 
function bar(?string $msg = “default”) {
    if ($msg!== null) {
        echo $msg;
    }
}

bar("ok") ;       // OK
bar(null) ;       // OK, displays nothing
bar(4) ;          // OK, if the script is not in strict mode

bar() ;           // OK, display 'default' 
?>

一个有趣的细节是无形类型与默认值之间的关系。类型可能具有两者。如果给出任何参数时,默认值将适用:如果给出了参数,但是为null,则被接受,然后按原样传递。这在上面的示例中示出。当然,返回类型没有默认值。

您可以从RFC中了解有关此新功能的更多信息: //wiki.php.net/rfc/nullable_types

迭代类型

虽然我们’重新完成“类型提示”部分,有一个新的金沙上线:ITable。它表示可以给予foreach循环的任何结构或来自运算符的产量,例如阵列(简单类型),类对象,生成器或任何 遍历 课程。它可以用作类型提示或返回类型。

这不是一个真实类型:它涵盖了几个不同的类或数据类型,可以’T在单一类型提示下进行分组。与int,void或可调用一样,现在禁止使用它作为类,特征或接口名称,尽管没有这样的类。

<?php
function bar(): iterable {
    return [1, 2, 3];
}
?>

与此功能相关,还介绍了名为IS_ITERABLE()的函数,以检查此类型对的变量。阅读更多关于迭代的更多信息 //wiki.php.net/rfc/iterable.

阶级恒定的可见性

达到金沙上线 7.1,班级常量总是公开:没有办法将它们隐藏在课程中,并且可以对代码的每个其他部分访问它们。从金沙上线 7.1开始,现在可以限制类常量的使用,具有私有,受保护或公共,后者是向后兼容的默认行为。

<?php
class Foo {
	// 金沙上线 7.0 behavior. Nothing changes.
        const PUBLIC_CONST = 0;
 
        // Explicit visibilities
        private const PRIVATE_CONST = 1;
        protected const PROTECTED_CONST = 2;
        public const PUBLIC_CONST_TWO = 3, PUBLIC_CONST_THREE = 4;
}
?>

接口可能只有公共常量,并且当不是这种情况时触发编译时出错。非类常量也不能具有可见性。特质不能有常数,所以他们没有涉及。

八进制序列修复

八进制数在金沙上线 7.0中得到了修复,其中它们现在在编译时验证:无效的八个八个生成编译时间错误。在金沙上线 7.1中,现在是串八进制序列的时间。八进制序列是字符串序列,其中字符由其八进制表示法表示:

<?php

print "\123\n"; // Prints S

print "\523\n"; // Prints S too

?>

金沙上线 7.0及更早版本 ’T验证八进制值(这里123和523)并将其静默变为字符,模数400.现在是一个语法错误,对于超出\ 377的任何东西:

八万逃生序列溢出\ 523大于\ 377

如果你’关注此错误,金沙上线 7.1在迁移之前暗示您的代码。

警告arithmetics中的无效字符串

金沙上线通常会为我们提供杂耍的杂耍,并在弦中转换自动神奇的任何数字‘1’ or ‘-1.2’到其数字等价物,当它在数学上下文中使用时。因此,‘1’+ 3 === 4.到目前为止,这一点’t change in 金沙上线 7.1.

另一方面,随着字符串到数字转换的情况符合问题,更改的变化现在将发出警告。所以,‘1 elephpant’+ 3 === 4仍然可以,但也会生成 注意:遇到非良好的成本数字字符串。

如果字符串可以是可以编辑的通知’T转变为一个数字,当字符串包含非数字字符时(«12.00 $ CAD»),非美国公约(«1 023,45»)甚至是白空间(«234»)。这适用于文字,以为它赢了’T在编译时检查;最重要的是,它适用于运行时的任何值,包括添加的任何过滤器:

<?php
$amount = abs($_GET['amount']) + 0 ; // Make this a safe integer.
?>

一个可能导致返回病房不相容的特殊案例是科学符号。发生的神奇转换用于由3种不同的功能范围处理,所有这些都与科学符号不同。因此,

<?php
echo "1.2345e9" + 0;
echo (int) "1.2345e9";
?>

金沙上线 7.0以不同的方式处理两种表达式:第一行是123450,而第二行是1(自点以来‘.’不是有效的整数字符)。在金沙上线 7.1中,行为都是相同的,并且始终识别科学符号。这可能导致一些后向不兼容性,当字符串的开始可能被误读为具有科学号码时。

期望从这个功能中听到很多。

新功能

我们已经看到了is_iterable(),它被介绍了intreaper。以下是新功能:

  • mb_ord()和mb_chr()是更好的mb_encode()和decode_numericentity()和for ord()/ chr()的多字节版本。它们还将编码为第二个参数,或使用MBString.Internal_Encoding作为默认值。

$ char_code = mb_chr($ mb_char [,$ encoding = mbstring.internal_encoding])
$ mb_char = mb_ord($ char_code [,$ concoding = mbstring.internal_encoding])

  • mb_scrub()清除作为第一个参数提供的字符串,用于作为第二个参数提供的编码,并使用提供为第三个参数的替换。
  • curl_share_strerror(),curl_multi_errno()和curl_share_errno()都提供对卷曲会话期间发生的错误的访问,以及获得人类可读消息的方法。
  • sapi_windows_cp_set(),sapi_windows_cp_get(),sapi_windows_cp_is_utf8()已添加用于代码页处理。

下周更多(再次!)

这是第二部分足够的,甚至有一些左侧甜点。我们’下周在金沙上线 7.1上返回,使用Closure :: from可卡,更改的函数,随机数和call_user_func()