1 常用方法

  • 显示类型:var_dump($var);

  • 获取当前PHP消耗:memory_get_usage

  • 禁止显示PHP警告:error_reporting(0);

  • PHP标量类型:布尔型(boolean),整型(integer),浮点型,字符串

  • 特殊类型:资源(resource)、空类型(null、NULL)

  • 常量:bool define(string $constant_name, mixed $value[, $case_sensitive = true]) 第一个参数“constant_name”为必选参数,常量名称,即标志符,常量的命名规则与变量的一致,但是要注意哦,它可不带美元符号哦。第二个参数“value”为必选参数,它是常量的值。第三个参数“case_sensitive”为可选参数,指定是否大小写敏感,设定为true表示不敏感,一般不指定第三个参数的情况下,默认第三个参数的值为false。

  • 系统常量:

    • 1.FILE : php程序文件名。它可以帮助我们获取当前文件在服务器的物理位置。

    • 2.LINE : PHP程序文件行数。它可以告诉我们,当前代码在第几行。

    • 3.PHP_VERSION:当前解析器的版本号。它可以告诉我们当前PHP解析器的版本号,我们可以提前知道我们的PHP代码是否可被该PHP解析器解析。

    • 4.PHP_OS:执行当前PHP版本的操作系统名称。它可以告诉我们服务器所用的操作系统名称,我们可以根据该操作系统优化我们的代码。

  • 常量获取:

    • 1.使用常量名直接获取值

    • 2.mixed constant(string constant_name); mixed表示返回的值为多种不同的类型,constant_name为要获取常量的名

  • 常量是否被定义: bool defined(string constants_name) 它只有参数constant_name,指的是要获取常量的名称,若存在则返回布尔类型true,否则返回布尔类型false; (注:bool表示函数返回值类型为布尔类型)

  • 字符串连接符:

    • 1.连接运算符(“.”):它返回将右参数附加到左参数后面所得的字符串。

    • 2.连接赋值运算符(“.=”):它将右边参数附加到左边的参数后。

  • 向上舍入为最接近的整数:ceil()

  • 判断不为空:isset()

2 运算符

2.1 赋值运算符

  • =:把右边的表达式的值赋值给左边的运算数。

  • &:引用赋值,意味着两个变量东渡指向同一个数据。

2.2 比较运算符

2.3 三元运算符

(“?:”)三元运算符也是一个比较运算符,对于表达式(expr1)?(expr2):(expr3),如果expr1的值为true,则此表达式的值为expr2,否则为expr3。

2.4 逻辑运算符

2.5 错误控制运算符

错误控制前缀“@”不会屏蔽解析错误的信息,不能把它放在函数或类的定义之前,也不能用于条件结构例如if和foreach等。

3 数组

  • 循环数组:foreach($students as $key=>$val)

  • 创建数组:创建 array()

  • 索引数组:

    • 1.$arrayDemo = array("demo1","demo2","demo3")

    • 2.$arrayDemo2[0] = "demo1"

    • 3.$arrayDemo3 = array('0'=>'demo1')

  • 访问数组:$arrayDemo[0]

4 属性和方法

4.1 类与对象的属性

  • public:公开的

  • protected:受保护的

  • private:私有的

4.2 方法

  • public:公开的

  • protected:受保护的

  • private:私有的

使用关键字static修饰的,称之为静态方法,静态方法不需要实例化对象,可以通过类名直接调用,操作符为双冒号::。

4.3 构造函数

_construct()定义一个构造函数,具有构造函数的类,会在每次对象创建的时候调用该函数,因此常用来在对象创建的时候进行一些初始化工作。 在子类中如果定义了__construct则不会调用父类的__construct,如果需要同时调用父类的构造函数,需要使用parent::__construct()显式的调用。

4.4 static关键字

静态方法也可以通过变量来进行动态调用,静态方法中,$this伪变量不允许使用。可以使用self,parent,static在内部调用静态方法与属性。

例如:

private static $speed = 10; 
public static function getSpeed() { 
    return self::$speed;
}

4.5 属性重载

属性的重载通过__set,__get,__isset,__unset来分别实现对不存在属性的赋值、读取、判断属性是否设置、销毁属性。

4.6 方法的重载

方法的重载通过__call来实现,当调用不存在的方法的时候,将会转为参数调用__call方法,当调用不存在的静态方法时会使用__callStatic重载。

5 对象

5.1 对象比较

当同一个类的两个实例的所有属性都相等时,可以使用比较运算符==进行判断,当需要判断两个变量是否为同一个对象的引用时,可以使用全等运算符===进行判断。

5.2 对象复制

对象复制,在一些特殊情况下,可以通过关键字clone来复制一个对象,这时__clone方法会被调用,通过这个魔术方法来设置属性的值。

5.3 对象序列化和反序列化:

对象序列化,可以通过serialize方法将对象序列化为字符串,用于存储或者传递数据,然后在需要的时候通过unserialize将字符串反序列化成对象进行使用。

6 正则表达式

preg_match();

//请修改变量p的正则表达式,使他能够匹配str中的电话
$p = '/[\d-]+/';
$str = "我的电话是010-12345678";
preg_match($p, $str, $match);
echo $match[0];

输出010-12345678

$match[x]中的x是匹配正则表达式中的子组的位置,0代表全部,1代表第一个子组,2代表第二个子组,以此类推。

子组:子组通过圆括号()界定。

  • 1.读取cookie: $_COOKIE['key']

  • 2.设置cookie: PHP设置Cookie最常用的方法就是使用setcookie函数,setcookie具有7个可选参数,我们常用到的为前5个:

    • name( Cookie名)可以通过$_COOKIE['name'] 进行访问

    • value(Cookie的值)

    • expire(过期时间)Unix时间戳格式,默认为0,表示浏览器关闭即失效

    • path(有效路径)如果路径设置为'/',则整个网站都有效

    • domain(有效域)默认整个域名都有效,如果设置了'www.imooc.com',则只在www子域中有效。

    • 第六个:secure设置这个 Cookie 是否仅仅通过安全的 HTTPS 连接传给客户端。

    • 第七个:httponly设置成 TRUE,Cookie 仅可通过 HTTP 协议访问。这意思就是 Cookie 无法通过类似 JavaScript 这样的脚本语言访问。 要有效减少 XSS 攻击时的身份窃取行为,可建议用此设置(虽然不是所有浏览器都支持),不过这个说法经常有争议。 PHP 5.2.0 中添加。

  • 3.删除cookie: 将cookie的过期时间设置到当前时间之前,则该cookie会自动失效,也就达到了删除cookie的目的:

    • setcookie('test', '', time()-1);

    • header("Set-Cookie:test=1393832059; expires=".gmdate('D, d M Y H:i:s \G\M\T', time()-1));

  • 4.cookie的有效路径

    • setcookie('test', time(), 0, '/path');

    • 设置会使test在/path以及子路径/path/abc下都有效,但是在根目录下就读取不到test的cookie值。

8 session

  • 1.启动session: session_start();

  • 2.对session进行写入: $_SESSION['test'] = time();

  • 3.对session进行读取: $_SESSION['test']

  • 4.删除session:

    • 删除部分:unset($_SESSION['test']);

    • 删除所有:session_destroy();

    • 值得注意的是,session_destroy并不会立即的销毁全局变量$_SESSION中的值,只有当下次再访问的时候,$_SESSION才为空,因此如果需要立即销$_SESSION,可以使用unset函数。

  • 5.注意: 默认情况下,session是以文件形式存储在服务器上的,因此当一个页面开启了session之后,会独占这个session文件,这样会导致当前用户的其他并发访问无法执行而等待。可以采用缓存或者数据库的形式存储来解决这个问题。