1. PHP对密码hash和验证(可以用于用户登录验证)
(PHP 5 >= 5.5.0, PHP 7) PHP通过password_hash和password_verify函数,用一种安全的方式来大力支持密码的哈希和验证,实现方法如下:
class Password {
public static function hash($password) {
return password_hash($password, PASSWORD_DEFAULT, ['cost' => 14]);
}
public static function verify($password, $hash) {
return password_verify($password, $hash);
}
}
2. json_encode()和json_decode()
php中JSON的序列化和反序列化,我一般在数组传递过程中用的比较多。
更多信息请看这里:http://php.net/manual/en/function.json-encode.php
3. 标量类型声明(PHP7)
PHP是一种松散类型的编程语言,因此没有提供任何指定输入参数类型和返回值类型的方法。 PHP7通过以下语法改变了这个现象:
function add(int $x, int $y) : int
{
return $x + $y;
}
echo add(1, 2);
有效类型为:类/接口名称,self,array(数组),callable(回调类型),bool(布尔型),float(浮点型),int(整型)和string(字符串)。
4. ?? — 空接合操作符(PHP7)
空接合操作符虽然小,但非常好用,是PHP7中新增加的。?? — 只要操作符的左边存在且不为空,就返回左边,否则就返回操作符的右边:
//$a is not defined
$b = NULL;
$c = "abc123";
echo($a ?? $b ?? $c);
//Result: abc123
5. 匿名类(PHP7)
PHP7中还有一个新增的也很不错,那就是匿名类。有时候,我们只是没有必要创建一个命名的类,因为它的名字会导致当前命名空间的膨胀。语法非常简单:
echo (new class() {
public function myMethod() {
return "Hello!";
}
})->myMethod();
//Result: Hello!
6. Reflection
Reflection是一个用来获取有关运行时代码信息的强大框架。让你可以对类、接口、函数、方法和扩展执行反向工程,以构建映射引擎,IoC容器或文档框架等等。
下面是一个获取匿名类所有方法的简单例子:
$class = new ReflectionClass(new class() {
public function getText() {
return "Hello from anonymous class";
}
});
$methods = $class->getMethods();
var_dump($methods);
更多信息请看这里:http://php.net/manual/en/book.reflection.php
7. 短数组初始化
在用PHP编程的时候,我倾向于大量使用数组,因为它们不仅功能强大,而且简单易用。PHP的5.4.x版本使得更容易初始化:
$myArray = ["foo", "name" => "bar"];
8. DateTime类
PHP的5.2版本附带DateTime类作为首选的操纵和格式化日期和时间的方式。
更多信息请看这里:http://php.net/manual/en/class.datetime.php
9. Lambda表达式/匿名函数
匿名函数(有时也被称为lambda表达式)是没有指定名称的函数。匿名函数可以被分配给一个变量,如下例所示:
$sayHi = function($toName) {
echo("Hi " . $toName);
};
$sayHi("Peter");
更多信息请看这里:http://php.net/manual/en/functions.anonymous.php
10. array_map
array_map是一个不错的函数,能帮助你对数组中的每个元素执行计算。这在混合了匿名函数/ lambda表达式的时候特别好用。无论你为数组中的元素提供什么方法,array_map函数都适用:
$nameLengths = array_map(function($item) {
return strlen($item); }, ["Sue", "Peter", "Michael"]);
//Result: 3, 5, 7
需要注意的是,array_map可能会比foreach慢一点儿(特别当混合使用lambda表达式的时候更为明显),所以要慎用于那些非常大的数组。
更多信息请看这里:http://php.net/manual/en/function.array-map.php