PHP手册

重温PHP手册 – 引用

引用

在 PHP 中引用意味着用不同的名字访问同一个变量内容。

引用做什么

如果对一个未定义的变量进行引用赋值、引用参数传递或引用返回,则会自动创建该变量。

function foo(&$var) { }

foo($a); // $a is "created" and assigned to null

$b = array();
foo($b['b']);
var_dump(array_key_exists('b', $b)); // bool(true)

继续阅读

重温PHP手册 – 生成器

生成器

(PHP 5 >= 5.5.0)生成器提供了一种更容易的方法来实现简单的对象迭代。

生成器允许你在 foreach 代码块中写代码来迭代一组数据而不需要在内存中创建一个数组,生成器可以根据需要 yield 多次,以便生成需要迭代的值。

一个简单的例子就是使用生成器来重新实现 range() 函数。 标准的 range() 函数需要为其中的每一个返回值在内存中生成一个数组, 结果就是生成一个很大的数组。 比如,调用 range(0, 1000000) 将导致内存占用超过 100 MB。

做为一种替代方法, 我们可以实现一个 xrange() 生成器, 只需要足够的内存来创建 Iterator 对象并在内部跟踪生成器的当前状态,这样只需要不到1K字节的内存。

继续阅读

重温PHP手册 – 异常

PHP 异常

在 PHP 代码中所产生的异常可被 throw 语句抛出并被 catch 语句捕获。

  • 需要进行异常处理的代码都必须放入 try 代码块内,以便捕获可能存在的异常。
  • 每一个 try 至少要有一个与之对应的 catch。
  • 使用多个 catch 可以捕获不同的类所产生的异常。
  • 当 try 代码块不再抛出异常或者找不到 catch 能匹配所抛出的异常时,PHP 代码就会在跳转到最后一个 catch 的后面继续执行。
  • PHP 允许在 catch 代码块内再次抛出(throw)异常。

当一个异常被抛出时,其后(指抛出异常时所在的代码块后面)的代码将不会继续执行,而 PHP 就会尝试查找第一个能与之匹配的 catch。如果一个异常没有被捕获,而且又没用使用 set_exception_handler() 作相应的处理的话,那么 PHP 将会产生一个严重的错误,并且输出 Uncaught Exception … (未捕获异常)的提示信息。

PHP 内部函数主要使用错误报告, 只有现代面向对象的扩展才使用异常。但错误可以很容易的通过ErrorException转换为异常。

继续阅读

重温PHP手册 – 命名空间

命名空间概述

PHP 在 5.3.0 以后开始支持的命名空间提供了一种将相关的类、函数和常量组合到一起的途径。解决了如下两类问题:

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

继续阅读

重温PHP手册 – 类与对象

基本概念

$this

$this 是一个到主叫对象的引用(如果是从第二个对象静态调用时也可能是另一个对象)。

$this 和 self 的区别:

  • $this 指向当前的 object, self 指向当前的 class。
  • 访问类中声明的静态(static)变量和静态函数,需使用 self(使用 $this 合法,但输出 null)

继续阅读

重温PHP手册 – 流程控制

break

break 可以接受一个可选的数字参数来决定跳出几重循环,默认为1。

$i = 0;
while (++$i) {
    switch ($i) {
    case 5:
        echo "At 5<br />\n";
        break 1;  /* 只退出 switch. */
    case 10:
        echo "At 10; quitting<br />\n";
        break 2;  /* 退出 switch 和 while 循环 */
    default:
        break;
    }
}

类似的,continue 接受一个可选的数字参数来决定跳过几重循环到循环结尾,默认为1。

继续阅读

重温PHP手册 – 运算符

一些小内容:

  • 对具有相同优先级的运算符,左结合方向意味着将从左向右求值,右结合方向则反之。
  • 取模运算符的操作数在运算之前都会转换成整数(除去小数部分)。
  • 取模运算符 % 的结果和被除数的符号(正负号)相同。即 $a % $b 的结果和 $a 的符号相同。
  • $text .= "additional text"$text = $text ."additional text" 高效。
  • int("a") = 0 ,所以 if ("a" == 0) 成立。

继续阅读

重温PHP手册 – 语法

PHP的语法基础、PHP与HTML代码的分离、注释。

语法基础

PHP脚本采用 <?php ... ?> 标记,如果文件内容是纯 PHP 代码,最好在文件末尾删除 PHP 结束标记。这可以避免在 PHP 结束标记之后万一意外加入了空格或者换行符,会导致 PHP 开始输出这些空白,而脚本中此时并无输出的意图。

继续阅读