• php-预定义


    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

    • $_SESSION:存放session的地方

    • $_ENV:环境变量,也是一个数组

    • $_COKKIE:存放cookie的地方

    • $HTTP_RAW_POST_DATA:原生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这个属性不存在,得到的值为null
      var_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接口

  • 相关阅读:
    《软件工程》第十六周学习进度
    个人总结
    构建之法阅读笔记06
    《软件工程》第十五周学习进度
    构建之法阅读笔记05
    《软件工程》第十四周学习进度
    买书问题
    第二阶段团队项目冲刺第十天
    第二阶段团队项目冲刺第九天
    第二阶段团队项目冲刺第八天
  • 原文地址:https://www.cnblogs.com/zhuchunyu/p/10648668.html
Copyright © 2020-2023  润新知