1 载入文件
1.1 使用 require()
和 include()
函数
require()
和 include()
函数可以将一个文件载入到PHP脚本中,该文件可以包含PHP语句,文本,HTML标记,PHP函数或PHP类。
require
与 include
的不同在于,导入失败 require
会报错,而 include
只是给出一个警告。
PHP在导入文件时,并不会查看所需文件的扩展名,这就意味着只要不想直接调用这个文件,就可以任意命名该文件,当使用 require()
语句载入文件时,它会作为PHP文件的一部分被执行。因此,可以使用任何扩展名来命名包含文件,但要尽量遵循一个约定,尽量地将扩展名命名为 .inc
或 .php
。
需要注意的问题还有一个就是,如果扩展名为 .inc
或其他一些非 .php
的扩展名保存在web服务器文档中,用户可以很容易在浏览器直接载入他们以此来查看后端源代码,以此包含文件应该要保存在服务器访问文档树之外,或者直接使用标准的文件扩展名。
1.2 使用 auto_prepend_file
和 auto_append_file
比方说有时候想要固定页面的页眉之类的固定模块在多个页面上,此除了使用 require
以及 include
函数外,还可以使用配置文件 php.ini
中的 auto_prepend_file
和 auto_append_file
,这两个选项可以保证他们在每个页面都被载入。
1.3 .htaccess
文件
以上的文件有一个弊端就是这样会导致所有文件都载入文件,但是有些时候可能比不需要这样,此时如果使用的Apache Web服务器就可以创建 .htaccess
文件,此文件可以对单个目录进行不同配置选项的修改,该文件需要包含例如以下的两行代码:
php_value auto_prepend_file "/importH.inc"
php_value auto_append_file "/importE.inc"
2 类
当创建一个PHP类的时候,必须使用关键词 class
。
2.1 类的结构
2.1.1 关键字
如同C#一样,PHP也有一些关键字,这些关键字与变量的作用域相关:
public
:默认,在类的内部外部都可以访问private
:在类的内部可以访问,但不能被继承protected
:在类的内部可以访问,可以被继承
2.1.2 构造函数与析构函数
PHP的构造函数的设置与其他操作的声明一样,只是其名称必须为 __construct()
,PHP支持函数重载。
与构造函数的名称类似,一个类的析构函数必须是 __destruct()
,析构函数不能有任何参数。
2.1.3 类的属性
在一个类中可以使用一个特殊的指针 $this
来指向当前类,而访问实例的属性,则可以使用 $this->attribute
的形式来引用,要注意的是PHP的变量必须以 $
开头,但在使用 $this->$name
的形式访问数据时,此 $name
指的是可以是去除 $
符号的变量名称。
通常从类的外部直接访问类的属性是糟糕的想法,此时可以使用 __get()
和 __set()
函数来实现对属性的访问和设置。
2.1.4 继承与重载
PHP的继承使用的是 extends
关键字,形式如:
class B extends A {}
其中A为父类,B为子类,子类可以重载父类的属性以及函数,此时重载与普通的声明属性以及函数并没有区别。
使用 parent
关键字允许调用父类操作的最初版本,比如在B类中调用A类的 fun1
函数,可以使用 parent::operation();
使用 final
关键字禁止继承和重载,如:
class A {
final function operation() {
echo "something";
}
}
2.1.5 Per-Class
常量与实现静态方法
使用 Per-Class
常量,这个常量可以在不需初始化该类的情况下使用,声明方法如下:
<?php
class Math {
// 声明 Per-Class 常量
const pi = 3.14159;
}
echo Math::pi; // 调用常量
?>
PHP还允许使用 static
关键字适用于允许在未初始化类的情况下可以调用,声明方法如下:
class Math
{
// 声明方法
static function squared($input)
{
return $input*$input;
}
}
// 调用方法
echo Math::squared(8);
2.2 检查类的类型和类型提示
instanceof
关键字允许检查一个对象的类型,可以检查一个对象是否特定类的实例,eg:
$b instanceof B; // 返回true
3 错误和异常处理
异常的处理基本就是代码在 try
代码块被调用执行,但与很多语言不一样,PHP并不会自动抛出异常,需要手动抛出,以使用 throw
的关键字的形式将处罚异常处理机制。而在捕获阶段就需要使用到 catch
代码块
3.1 Exception
类
PHP为异常处理提供了内置类 Exception
,其构造函数需要两个参数,分别是 错误信息 以及 错误代码号,该类还提供如下内置方法:
getCode()
:获取传递给构造函数的错误代码getMessage()
:获取传递给构造函数的错误消息getFile()
:返回产生异常代码文件的完整路径(使用__FILE__
可以读取当前文件路径)getLine()
:返回行号(使用__LINE__
可以读取行号)__toString
:允许简单的显示一个Exception
对象,并且给出以上所有方法提供的消息
注意 Exception
类可以被继承,但是以上方法除了 __toString
外都无法重载。