一致性的foreach循环
//PHP5
$a = array(1, 2, 3);foreach ($a as $v){var_dump(current($a));}
int(2)
int(2)
int(2)
$a = array(1, 2, 3);$b=&$a;foreach ($a as $v){var_dump(current($a));}
int(2)
int(3)
bool(false)
$a = array(1, 2, 3);$b=$a;foreach ($a as $v){var_dump(current($a));}
int(1)
int(1)
int(1)
//PHP7:不再操作数据的内部指针了
$a = array(1, 2, 3);foreach ($a as $v){var_dump(current($a))}
int(1)
int(1)
int(1)
$a = array(1, 2, 3);$b=&$a;foreach ($a as $v){var_dump(current($a))
int(1)
int(1)
int(1)
$a = array(1, 2, 3);$b=$a;foreach ($a as $v){var_dump(current($a))}
int(1)
int(1)
int(1)上下问敏感的词法分析
//PHP5
class Collection {public function foreach($arr) {}}
#Parse error: parse error, expecting `"identifier (T_STRING)”’...
//PHP7
class Collection {
public function foreach($arr) {
return $this;
}
public function in($arr){
return $this;
}
public function sort($condition){
return $this;
}
public function echo($condition){
return 'ok';
}
}
$collection = new Collection();
$collection->in()->foreach()->sort()->echo();use方法 批量导入
// PHP 7 之前的代码
use somenamespaceClassA;
use somenamespaceClassB;
use somenamespaceClassC as C;
use function somenamespacefn_a;
use function somenamespacefn_b;
use function somenamespacefn_c;
use const somenamespaceConstA;
use const somenamespaceConstB;
use const somenamespaceConstC;
// PHP 7+ 及更高版本的代码
use somenamespace{ClassA, ClassB, ClassC as C};
use function somenamespace{fn_a, fn_b, fn_c};
use const somenamespace{ConstA, ConstB, ConstC}
use FooBar{
Foo,
Bar,
Baz,
};允许重写抽象方法
abstract class A
{
abstract function test(string $s);
}
abstract class B extends A
{
// overridden - still maintaining contravariance for parameters and covariance for return
abstract function test($s) : int;
}
多异常捕获处理
try {
// some code
} catch (FirstException | SecondException $e) { //用 | 来捕获FirstException异常,或者SecondException 异常
}支持goto语句
goto a;
echo '牛逼';
a:
echo 'pfinal';
for($i=0,$j=50; $i<100; $i++) {
while($j--) {
if($j==17) goto end;
}
}
echo "i = $i";
end:
echo '社区';
Nowdoc语法
// Nowdoc 单引号 PHP 5.3之后支持
$name = 'pfinal';
echo <<<'EXO'
My name is "$name".
EXO;
//上面代码输出 My name is "$name". ((其中变量不被解析)
echo <<<FOOBAR
Hello pfinal社区
FOOBAR;
echo <<<"FOOBAR"
Hello pfinal社区
FOOBAR;
常量引用
//常量引用”意味着数组可以直接操作字符串和数组字面值。
function randomHexString($length) {
$str = '';
for ($i = 0; $i < $length; ++$i) {
$str .= "0123456789abcdef"[mt_rand(0, 15)]; // direct dereference of string
}
}
function randomBool() {
return [false, true][mt_rand(0, 1)]; // direct dereference of array
}
常量增强
//常量计算
const A = 2;
const B = A + 1;
class C
{
const STR = "hello";
const STR2 = self::STR . ", world";
}
var_dump(C::STR2);
var_dump(B);
//类常量可见性
class ConstDemo
{
const PUBLIC_CONST_A = 1;
public const PUBLIC_CONST_B = 2;
protected const PROTECTED_CONST = 3;
private const PRIVATE_CONST = 4;
}
可变函数参数
function add(...$args)
{
$result = 0;
foreach($args as $arg)
$result += $arg;
return $result;
}
Session options
//现在,session_start()函数可以接收一个数组作为参数,可以覆盖php.ini中session的配置项。 比如,把cache_limiter设置为私有的,同时在阅读完session后立即关闭。
session_start(['cache_limiter' => 'private',
'read_and_close' => true,
]);
支持动态调用静态方法
class Test{
public static function testgo()
{
echo "pfinal社区牛逼!";
}
}
$class = 'Test';
$action = 'testgo';
$class::$action(); //输出 "pfinal社区牛逼!"
整除
var_dump(intdiv(10, 3));
随机函数
//random_bytes() -加密生存被保护的伪随机字符串.
//random_int() -加密生存被保护的伪随机整数.
$bytes = random_bytes(8);
echo(bin2hex($bytes));//随机2073a110a2e3c497
echo '
';
echo(random_int(1, 999));//随机786
echo '
';
print(random_int(-999, -1));//随机-357 参考链接:
评论列表(0条)