搜索
首页后端开发php教程PHP 5.0 到 7.1 常用语法糖

PHP 5.0 到 7.1 常用语法糖

Apr 08, 2018 pm 01:44 PM
php常用语法

在计算机科学中,语法糖(syntactic sugar)是指编程语言中可以更容易的表达一个操作的语法,它可以使程序员更加容易去使用这门语言:操作可以变得更加清晰、方便,或者更加符合程序员的编程习惯。

类型

Boolean
  • 空对象在4.0以后都视为true

String
  • string的内部结构类似 array, 可以像python一下使用下标访问字符串

        $str = '012345';    echo $str[1];  //1
        echo $str{2};  //2
Array
  • 5.4 以后可以像JS一样定义数组

        $arr = ['one', 'two', 'three']; //感觉方便了很多

全局变量

时间长不用总会忘记重新整理一下加深下印象
$_SERVER
  • SERVER_ADDR IP地址 127.0.0.1

  • SERVER_NAME 主机名 localhost

  • SERVER_SOFTWARE 服务器类型 nginx

  • REMOTE_ADDR 客户端IP. 127.0.0.1 
    s

$_FILES
  • $_FILES['file']['name'] 图片原名称

  • $_FILES['file']['type'] 图片MIME类型

  • $_FILES['file']['size'] 图片大小

  • $_FILES['file']['tmp_name'] 服务器端临时名称

常量
  • 5.3之后可以使用const来定义常量

const DEBUG = true;
运算符
  • 96b4fef55684b9312718d5de63fb7121 比较运算符,7.0 之后支持

echo  $a <=> $b;/*
当 $a < $b 时, 表达式返回 -1
当 $a = $b 时, 表达是返回 0
当 $a > $b 时, 表达式返回  1
*/
  • ?? 空合并运算符 PHP7特性。

$name = $_POST[&#39;name&#39;] ?? &#39;&#39;;  //如果前面的值不为null,则返回本身,否则返回后面的值
  • 三元运算符 ?: 5.3以后可以使用

$name = $_POST[&#39;name&#39;] ?: &#39;&#39;; ////如果前面的值不为null,则返回本身,否则返回后面的值
流程控制
  • goto 5.3以上有效

操作符可以用来跳转到程序中的另一位置。该目标位置可以用目标名称加上冒号来标记,而跳转指令是 goto 之后接上目标位置的标记。PHP 中的 goto 有一定限制,目标位置只能位于同一个文件和作用域,也就是说无法跳出一个函数或类方法,也无法跳入到另一个函数。也无法跳入到任何循环或者 switch 结构中。可以跳出循环或者 switch,通常的用法是用 goto 代替多层的 break。

goto a;echo &#39;Foo&#39;;

a:echo &#39;Bar&#39;;//输出 Bar
函数
  • 变长参数 ..., 5.6以后可用

function dosum(...$arr){
    $sum = 0;    foreach($arr as $v){        $sum += $v;
    }    return $sum;
}$arr = [1, 2, 3, 4, 5];echo dosum(...$arr);   // 输出15echo dosum(1,2,3,4,5,6); //输出21//TODO/**
这个语法,我最近总在用。感觉还比较简单。不过要注意服务器版本。。最近入了一个坑。
*/
  • 匿名函数(Anonymous functions)5.3

也叫闭包函数,在JS中很常见。为了防止污染全局作用域。5.3 以后PHP也支持了这种写法

$test = function($name=&#39;Li&#39;){
    echo &#39;My name is &#39;.$name;
};$test();

如果想要从父作用域中继承变量怎么办

//这里定义一个默认的输出名字的方式$tpl = &#39;My name is &#39;;//使用 use() 来引用父级的变量,最后输出结果与上边一致 $test = function($name=&#39;Li&#39;) use($tpl) {
    echo $tpl.$name;
};$test();

需要注意的是,闭包函数的父作用域,是定义它的作用域,不是调用的作用域

类和对象

  • ::class 类的静态方法,用于获取类的完全限定名称,(包含命名空间)

namespace Foo{    class test{

    }    echo test::class; // 输出 FOO\test, 在使用命名空间的情况非常有用}
  • 5.4 新增加的一个多继承实现方式trait。下面总结了一下基本概念

1.trait 和 class 是相似的概念,但不能被实例化 
2.一个类可以使用多个trait,优先级是 class > trait > 父类继承的方法 
3.使用insteadof 来解决 tarit 冲突 
4.使用as,来修改方法的访问控制 
5.在trait中也可以使用tarit。和在class中用法一致

trait A {    public function say(){
        echo &#39;trait  A&#39;;
    }
}trait B {    public function say(){
        echo &#39;trait B&#39;;
    }    public function walk(){
        echo &#39;walk B&#39;;
    }
}class Person {
    use A, B{        B :: say insteadof A; // 使用B的say方法代替了A的say方法
        walk as protected;    // 将walk 设置为受保护的
    }


}$obj = new Person;$obj->say();  // echo trait A;$obj->walk(); // 提示不能访问一个受保护的方法

6.在trait中使用, 属性、静态属性、静态方法、抽象类都是被允许的。

trait Test {    public static $obj;    public $name = 1;    static function createObj(){
        return empty(self::$obj) ? new self : self::$obj;
    }
}class son {
    use Test;
}$obj = son::createObj();echo $obj->name;  // echo 1echo $obj === $obj1 ? 0 : 1; // echo 1



  • 5.3 类的后期静态绑定 
    官方的解释是: 


该功能从语言内部角度考虑被命名为”后期静态绑定”。”后期绑定”的意思是说,static:: 不再被解析为定义当前方法所在的类,而是在实际运行时计算的。也可以称之为”静态绑定”,因为它可以用于(但不限于)静态方法的调用 
乍一看,好像什么也没看懂。看看具体的代码吧。
class A {
    public static function who() {
        echo __CLASS__;
    }    public static function test() {
        self::who();
    }
}class B extends A {
    public static function who() {
        echo __CLASS__;
    }
}
B::test(); // echo A;// 上面是一个正常的调用, 输出了 A// 当我们把 class A 的 test 方法修改一下。 将 self 改成 static 后class A {
    public static function who() {
        echo __CLASS__;
    }    public static function test() {
        static::who();
    }
}class B extends A {
    public static function who() {
        echo __CLASS__;
    }
}
B::test(); // echo B;

总结:PHP5.3新增加了一类关键字,static 可以在调用函数的方法。用这个关键字,来实现了后期静态绑定

异常处理

比较简单记录一下
try{    throw new Execption(&#39;抛出异常&#39;);
} catch (Execption $e){    //获取异常
    $error = $e->getMessage();
}echo $error;  //抛出异常

相关推荐:

从PHP语法糖剖析Zend VM引擎     

两行代码给 PHP7 添加一个“非空合并”语法糖

以上是PHP 5.0 到 7.1 常用语法糖 的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
可以在PHP会话中存储哪些数据?可以在PHP会话中存储哪些数据?May 02, 2025 am 12:17 AM

phpsessionscanStorestrings,数字,数组和原始物。

您如何开始PHP会话?您如何开始PHP会话?May 02, 2025 am 12:16 AM

tostartaphpsession,usesesses_start()attheScript'Sbeginning.1)placeitbeforeanyOutputtosetThesessionCookie.2)useSessionsforuserDatalikeloginstatusorshoppingcarts.3)regenerateSessiveIdStopreventFentfixationAttacks.s.4)考虑使用AttActAcks.s.s.4)

什么是会话再生,如何提高安全性?什么是会话再生,如何提高安全性?May 02, 2025 am 12:15 AM

会话再生是指在用户进行敏感操作时生成新会话ID并使旧ID失效,以防会话固定攻击。实现步骤包括:1.检测敏感操作,2.生成新会话ID,3.销毁旧会话ID,4.更新用户端会话信息。

使用PHP会话时有哪些性能考虑?使用PHP会话时有哪些性能考虑?May 02, 2025 am 12:11 AM

PHP会话对应用性能有显着影响。优化方法包括:1.使用数据库存储会话数据,提升响应速度;2.减少会话数据使用,只存储必要信息;3.采用非阻塞会话处理器,提高并发能力;4.调整会话过期时间,平衡用户体验和服务器负担;5.使用持久会话,减少数据读写次数。

PHP会话与Cookie有何不同?PHP会话与Cookie有何不同?May 02, 2025 am 12:03 AM

PHPsessionsareserver-side,whilecookiesareclient-side.1)Sessionsstoredataontheserver,aremoresecure,andhandlelargerdata.2)Cookiesstoredataontheclient,arelesssecure,andlimitedinsize.Usesessionsforsensitivedataandcookiesfornon-sensitive,client-sidedata.

PHP如何识别用户的会话?PHP如何识别用户的会话?May 01, 2025 am 12:23 AM

phpientifiesauser'ssessionusessessionSessionCookiesAndSessionIds.1)whiwSession_start()被称为,phpgeneratesainiquesesesessionIdStoredInacookInAcookInamedInAcienamedphpsessidontheuser'sbrowser'sbrowser.2)thisIdAllowSphptptpptpptpptpptortoreTessessionDataAfromtheserverMtheserver。

确保PHP会议的一些最佳实践是什么?确保PHP会议的一些最佳实践是什么?May 01, 2025 am 12:22 AM

PHP会话的安全可以通过以下措施实现:1.使用session_regenerate_id()在用户登录或重要操作时重新生成会话ID。2.通过HTTPS协议加密传输会话ID。3.使用session_save_path()指定安全目录存储会话数据,并正确设置权限。

PHP会话文件默认存储在哪里?PHP会话文件默认存储在哪里?May 01, 2025 am 12:15 AM

phpsessionFilesArestoredIntheDirectorySpecifiedBysession.save_path,通常是/tmponunix-likesystemsorc:\ windows \ windows \ temponwindows.tocustomizethis:tocustomizEthis:1)useession_save_save_save_path_path()

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具