php预定义异常
Exception是所有异常的基类
属性
message:异常消息内容code:异常代码file:抛出异常的文件名line:抛出异常在该文件的行号
ErrorException:异常错误
php预定义变量
$GLOBALS:引用全局作用域中可用的全局变量
$_SERVER:服务器和执行环境信息
命令 解释 SERVER_ADDR 当前运行脚本所在的服务器的 IP 地址 SERVER_NAME 当前运行脚本所在的服务器的主机名 GATEWAY_INTERFACE 服务器使用的 CGI 规范的版本 SERVER_PROTOCOL 请求页面时通信协议的名称和版本 REQUEST_METHOD 访问页面使用的请求方法 REQUEST_TIME 请求开始时的时间戳 QUERY_STRING query string(查询字符串) DOCUMENT_ROOT 当前运行脚本所在的文档根目录 $_GET:通过url参数传递给当前脚本的数组
比如:127.0.0.1:5000/index?name=zhuchunyu&password=123$_GET的值就为array( "name"=>"zhuchunyu", "password"=>"123",)
$_POST:当http发送post请求,请求头Content-Type是application/x-www-urlencoded或multipart/form-data时,也会将相应的数据以数组的形式传递给当前脚本。
$_FILES:文件信息在放在这个变量
$_REQUEST:默认包含
$GET
,$POST
,$COKKIE
$_
$_ENV:环境变量,也是一个数组
$_COKKIE:存放cookie的地方
$HTTP_RAW_POST_
$http_response_header:http响应头
$argv:和python中sys.argv用法差不多
$argc:参数数目
php预定义接口
遍历接口(Traversable)
检测一个类是否可以使用(foreach)进行遍历的接口
无法被单独实现的基本抽象接口。相反它必须由iteratorAggregate或iterator接口实现。
Traversable {}// 这个接口没有任何方法,它的作用仅仅作为所有可遍历类的基本接口interface Iterator extends Traversable{ // 定义抽象方法,继承的iterator的子类,必须要有以下方法 abstract public current(void); abstract public key (void); abstract public next (void); abstract public rewind (void); abstract public valid (void);}/*当一个实现了iterator接口的对象,被foreach遍历时,会自动调用这些方法。调用的顺序是:rewind()->valid()->current()->key()->next()*/// 写一个实现遍历接口的例子class Myrange implements Iterator{ private $start; private $stop; private $step; private $i; public function __construct($start,$stop,$step=1) { $this->start=$start; $this->stop=$stop; $this->step=$step; } public function current() { // TODO: Implement current() method. // 这里才是返回值 return 'current'.$this->i; } public function key() { // TODO: Implement key() method. // 获取当前的标量,如果对象里是一个数组,那么这个就是数组里的key $this->i; } public function next() { // TODO: Implement next() method. // 下一个标量的值 $this->i += $this->step; } public function rewind() { // TODO: Implement rewind() method. // 重置标量,默认是以0开始的 // 为的是Myrange(1,5,1)这种 $this->i = $this->start; } public function valid() { // TODO: Implement valid() method. // 校验当前标量是否合法 return $this->i <= $this->stop; } public function getId(){ // 获取到当前标量,$i是一个私有变量 return $this->i; }}$a = new Myrange(0,20,2);foreach ($a as $value){ var_dump($value);}var_dump($a->getId());
(聚合式迭代器)接口
创建外部迭代器的接口
interface IteratorAggregate extends Traversable { abstract public getIterator(void)}
(数组式访问)接口
提供像访问数组一样访问对象的能力的接口
interface ArrayAccess{ // 判断元素是否存在 function offsetExists($offset); // 获取元素 function offsetGet($offset); // 设置元素 function offsetSet($offset,$value); // 销毁某个元素 function offsetUnset($offset);}// 写一个类实现数组取值的方式class A implements ArrayAccess{ public $name; public $age; public $school; public function __construct($name,$age,$school) { $this->name=$name; $this->age=$age; $this->school=$school; } public function offsetExists($offset) { // TODO: Implement offsetExists() method. } public function offsetGet($offset) { // TODO: Implement offsetGet() method. return $this->$offset ? $this->$offset :null; } public function offsetSet($offset, $value) { // TODO: Implement offsetSet() method. $this->$offset = $value; } public function offsetUnset($offset) { // TODO: Implement offsetUnset() method. } public function __get($name) { // TODO: Implement __get() method. }}$a = new A('朱宇',22,'重庆');//var_dump($a);$name = $a["name"];$na = $a["na"]; // na这个属性不存在,得到的值为nullvar_dump($name);/*之前我没有加__get这个魔法时,是会报错的,原因是在这里这行代码$this->$offset ? $this->$offset :null;上面就是一个三元表达式,看这个表达式 $this->$offset,获取对象的一个属性,如果我没有写__get魔法方法,是会抛异常的,我加了上之后呢,没有找到属性的话,便会执行__get方法,所以这样不会抛异常。*/
序列化接口
// 接口摘要interface Serializable{ abstract public serialize(void):string; abstract public unserialize(string $serialized):minxed}// 实现了这个Serializble这个接口,就不用去执行__sleep,__wakeup// 写一个实现这个接口的例子class A implements Serializable{ private $data; public function __construct() { $this->data = [ "name"=>"zhuchunyu", "age"=>"18" ]; } public function serialize() { // TODO: Implement serialize() method. return serialize($this->data); } public function unserialize($serialized) { // TODO: Implement unserialize() method. return $this->unserialize($serialized); } public function getData(){ return $this->data; }}$a = new A;$ser_data = serialize($a->getData());$data = unserialize($ser_data);var_dump($ser_data);var_dump($data);
生成器接口
Generator对象是不能通过new实例化
Generator它是实现了Iterator接口