加入收藏 | 设为首页 | 会员中心 | 我要投稿 均轻资讯网_我爱站长网 (https://www.52junqing.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP用数组方式访问对象

发布时间:2022-10-08 14:57:52 所属栏目:PHP教程 来源:
导读:  在平时开发中PHP数组,经常会遇到一个对象被转换成数组后,经过复杂的业务逻辑处理后,数组又被传递给需要接收对象的方法使用,此时代码就会报 Trying to get property 'name' of non-object 错误,其

  在平时开发中PHP数组,经常会遇到一个对象被转换成数组后,经过复杂的业务逻辑处理后,数组又被传递给需要接收对象的方法使用,此时代码就会报 Trying to get property 'name' of non-object 错误,其实在PHP5版本时,官方就引入了一个 ArrayAccess 的接口,可以实现用数组方式访问对象,只要实现了该接口的几个方法,就可以让数据对象用数组语法使用。
 
  接口摘要
 
  interface ArrayAccess {
      // 判断一个下标是否存在
      public offsetExists(mixed $offset): bool
      // 通过数组下标获取值
      public offsetGet(mixed $offset): mixed
      // 设置数组下标对应的值
      public offsetSet(mixed $offset, mixed $value): void
      // 根据下标删除一个值
      public offsetUnset(mixed $offset): void
  }
  官方示例
 
  class Obj implements ArrayAccess {
      private $container = array();
      public function __construct() {
          $this->container = array(
              "one"   => 1,
              "two"   => 2,
              "three" => 3,
          );
      }
      public function offsetSet($offset, $value) {
 
          if (is_null($offset)) {
              $this->container[] = $value;
          } else {
              $this->container[$offset] = $value;
          }
      }
      public function offsetExists($offset) {
          return isset($this->container[$offset]);
      }
      public function offsetUnset($offset) {
          unset($this->container[$offset]);
      }
      public function offsetGet($offset) {
          return isset($this->container[$offset]) ? $this->container[$offset] : null;
      }
  }
  $obj = new Obj;
  var_dump(isset($obj["two"]));
  var_dump($obj["two"]);
  unset($obj["two"]);
  php数组头部添加数组_php 格式化数组_PHP数组
 
 
  var_dump(isset($obj["two"]));
  $obj["two"] = "A value";
  var_dump($obj["two"]);
  $obj[] = 'Append 1';
  $obj[] = 'Append 2';
  $obj[] = 'Append 3';
  print_r($obj);
  以上例程的输出如下:
 
  bool(true)
  int(2)
  bool(false)
  string(7) "A value"
  obj Object
  (
      [container:obj:private] => Array
          (
              [one] => 1
              [three] => 3
              [two] => A value
              [0] => Append 1
              [1] => Append 2
              [2] => Append 3
          )
  )
  从以上例子可以看出,对象已经支持用数组语法获取和设置属性值,当我们从数据库查询出数据后,可以将其封装成数据对象,方便扩展数据处理方法,同时也保证了,在后期数据传递过程中,无需转成真正的数组也能按数组语法使用,目前比较流行的 laravel 框架的 Eloquent 集合 就是用此方法实现的。
 

(编辑:均轻资讯网_我爱站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!