一个类如何同时成为一个数组和一个对象?

时间:2014-11-25 23:03:37

标签: php

阅读此documentation of the Silex PHP micro-framework

部分
  

该服务现在将在应用程序中注册,转换方法将用作   转换器:

代码

$app['converter.user'] = $app->share(function () {
    return new UserConverter();
});

$app->get('/user/{user}', function (User $user) {
    // ...
})->convert('user', 'converter.user:convert');

$app同时是一个数组+一个对象。或者让我们说它从数组开始,但被分配了一个对象。这让我感到困惑:$app['converter.user'] =

这是如何运作的?

2 个答案:

答案 0 :(得分:3)

使用PHP Iterator接口以及ArrayAccess接口将允许PHP知道您的类可以被视为数组。一种简单的方法是从ArrayObject类扩展。

基本上,这些接口发生的是你有一个私有变量,以及如何访问该变量的方法。接口让PHP知道这些方法存在,并且它实际上可以将该类视为数组。

现在,如果Silex使用这种方法,我无法发表评论。但是,这就是如何创建一个也可以作为数组访问的PHP类

答案 1 :(得分:2)

$app不是数组和对象。它只是一个对象,您可以通过索引或使用->运算符访问这些值。

要回答您的第二个问题,可以通过重载来实现,您可以阅读here