2016-10-18 16:34:56 6055次浏览 2条回答 1 悬赏 15 金钱
$session = Yii::$app->session;
var_dump($session); // dump出来是一个对象,但也dump不出来test的值
var_dump($session['test']); // 为什么可以直接通过key像数组一样取到值
var_dump($session->get('test')); // 这种方式能理解
补充于 2016-10-18 16:37

求高手解释一下当中的机制,如果$session['test']可以取到值,为什么用

var_dump($session)

输出的看不到test的值
只显示一个对象

object(yii\web\Session)#109 (6) {
  ["flashParam"]=>
  string(7) "__flash"
  ["handler"]=>
  NULL
  ["_cookieParams":"yii\web\Session":private]=>
  array(1) {
    ["httponly"]=>
    bool(true)
  }
  ["_hasSessionId":"yii\web\Session":private]=>
  NULL
  ["_events":"yii\base\Component":private]=>
  array(0) {
  }
  ["_behaviors":"yii\base\Component":private]=>
  NULL
}

最佳答案

  • bryson 发布于 2016-10-19 11:51 举报

    建議你看一下 Class : yii\web\session

    class Session extends Component implements \IteratorAggregate, \ArrayAccess, \Countable

    他有 implements ArrayAccess extension 這可以把物件當作陣列操作, 兩種均可使用

    1 条回复
    回复于 2016-10-19 17:43 回复

    多谢指导。已明白

    , 觉得很赞
  • 回答于 2016-10-18 21:40 举报

    这个是通过魔术方法__set,__get实现的,实际执行的是类似Yii::$app->get('session');

    2 条回复
    回复于 2016-10-19 10:17 回复

    Yii::$app->session 类似于 Yii::$app->get('session') 我明白。
    我的疑问是Yii::$app->session->get('test')为什么会和Yii::$app->session['test'],按我理解获取对象的属性应该用->符号,不能用类似的数组下标去获取啊。是什么机制令其可以的?

    回复于 2016-10-19 10:19 回复

    正如你不能通过Yii::$app['session']这样来获取session啊,会报Cannot use object of type yii\web\Application as array

您需要登录后才可以回答。登录 | 立即注册
aszx0413
助理

aszx0413

注册时间:2016-03-31
最后登录:15小时前
在线时长:12小时59分
  • 粉丝1
  • 金钱50
  • 威望0
  • 积分170

热门问题