PHP的杂项

本文深入探讨PHP命名空间的引入目的,包括解决命名冲突、提高代码可读性,以及如何通过三种方式引用命名空间中的类。此外,还介绍了静态关键字的使用、this/self/parent的区别、正则表达式技巧、HTTP协议状态特性和会话管理机制。

引入namespace的用意:

  1. 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
  2. 为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。

PHP 命名空间中的类名可以通过三种方式引用:

  1. 非限定名称,或不包含前缀的类名称,例如 foo::staticmethod();。如果当前命名空间是 currentnamespace,foo 将被解析为 currentnamespace\foo。如果使用 foo 的代码是全局的,不包含在任何命名空间中的代码,则 foo 会被解析为foo。 警告:如果命名空间中的函数或常量未定义,则该非限定的函数名称或常量名称会被解析为全局函数名称或常量名称。
  2. 限定名称,或包含前缀的名称,例如 subnamespace\foo::staticmethod();。如果当前的命名空间是 currentnamespace,则 foo 会被解析为 currentnamespace\subnamespace\foo。如果使用 foo 的代码是全局的,不包含在任何命名空间中的代码,foo 会被解析为subnamespace\foo。
  3. 完全限定名称,或包含了全局前缀操作符的名称,例如, \currentnamespace\foo::staticmethod();。在这种情况下,foo 总是被解析为代码中的文字名(literal name)currentnamespace\foo。

对于函数先在当前文件夹中找相同的函数,如若找不到则在全局找;对于常量的定义有两种方法,define和const;对于define是不受命名空间的影响的,而const是受的;

  • 小提示:路径的斜杠和注释的斜杠是相反的;
  • __NAMESPACE__ . '\\' . $classname;为的是转义字符;

this,self与parent的用法 请参考

PHP中this,self,parent的区别 - 失眠症 - 博客园


Static 关键字

声明类属性或方法为 static(静态),就可以不实例化类而直接访问。

静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)。

由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可用。

静态属性不可以由对象通过 -> 操作符来访问。

自 PHP 5.3.0 起,可以用一个变量来动态调用类。但该变量的值不能为关键字 self,parent 或 static。

调用父类构造方法

PHP 不会在子类的构造方法中自动的调用父类的构造方法。要执行父类的构造方法,需要在子类的构造方法中调用 parent::__construct()

表单和用户输入

select中name中应该为数组,name="p[]",其次foreach循环中as后只有一项的时候为键值中的值,单选按钮中为单个元素

SELECT:$q = isset($_POST['q'])? $_POST['q'] : '';//在后面直接判断是不是数组就行了

单选框:$q=isset($_GET["p"])?htmlspecialchars($_GET["P"]):"";//将带有双引号的字符串去掉双引号

checkbox:name也为数组,为p[]

xss类别:不持久型、持久型、DOM型

REQUEST_METHOD=="POST"//注意这个method的post应该为大写

正则表达式

这个网站很棒鬼斧神工之正则表达式-慕课网

推荐一个练习正则表达式的网站:RegExr: Learn, Build, & Test RegEx

(?:  pattern)是非捕获型括号  匹配pattern,但不捕获匹配结果。

(pattern )是捕获型括号。  匹配pattern,匹配pattern并捕获结果,自动获取组号

(?<name> pattern )  匹配pattern,  匹配pattern并捕获结果,设置name为组名 

    使用小括号指定一个子表达式后,匹配这个子表达式的文本(也就是此分组捕获的内容)可以在表达式或其它程序中作进一步的处理。默认情况下,每个捕获组会自动拥有一个组号,规则是:从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。 

    如果正则表达式中同时存在普通捕获组和命名捕获组,那么捕获组的编号就要特别注意,编号的规则是先对普通捕获组进行编号,再对命名捕获组进行编号。 

     为了避免括号太多使编号混乱,也为了避免无用的捕获提高效率,在不需要捕获只需要指定分组的地方就可以使用非捕获型括号。问题里的非捕获型括号就是为此使用的

无状态,有状态协议

举个例子我和朋友出去吃饭 不需要每次报上姓名 联系方式 等 朋友就知道我是谁 这是有状态的

而我去办事大厅 工作人员不会记得我是谁 每次去都要填表 出示身份证 这就是无状态的

无状态协议:在下一次链接不记住这一次链接的信息。

HTTP,UDP都是无状态协议

TCP,FTP是有状态协议

关于cookie和session的机制

PHP中session和cookie的用法及区别_让我看看谁在学习的博客-优快云博客_cookie phpsessid

PHP 会话(Session)实现用户登陆功能

PHP 会话(Session)实现用户登陆功能 | 菜鸟教程

错误处理类

Exception {

/* 属性 */

protected string $message ;

protected int $code ;

protected string $file ;

protected int $line ;

/* 方法 */

public __construct ([ string $message = "" [, int $code = 0 [, Throwable $previous = NULL ]]] )

final public getMessage ( void ) : string

final public getPrevious ( void ) : Throwable

final public getCode ( void ) : int

final public getFile ( void ) : string

final public getLine ( void ) : int

final public getTrace ( void ) : array

final public getTraceAsString ( void ) : string

public __toString ( void ) : string

final private __clone ( void ) : void

}

过滤器,能过滤的则是有用的,在if里其值为真

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值