Что означает $ this [$ variable] в php? - PullRequest
0 голосов
/ 26 апреля 2018

Я читал этот код :

public function registerService($name, Closure $closure, $shared = true) {
        $name = $this->sanitizeName($name);
        if (isset($this[$name]))  {
            unset($this[$name]);
        }
        if ($shared) {
            $this[$name] = $closure;
        } else {
            $this[$name] = parent::factory($closure);
        }
}

и не понимаю, что означает $this[$name].Как можно получить доступ к $ this как к массиву?Что именно здесь происходит?

Я поглядел на "$ this as array" и снова прочитал $ эту документацию , но не нашел ничего, объясняющего этот синтаксис.

Ответы [ 3 ]

0 голосов
/ 26 апреля 2018

Класс SimpleContainer расширяет Pimple\Container, который реализует \ArrayAccess, который включает массивоподобный синтаксис для вашего объекта с помощью ряда методов , задокументированных здесь .

0 голосов
/ 19 июля 2019

Я пришел, потому что хотел знать об этом.

После того, как я увидел ответ Хавенарда и затем проверил его, я обнаружил.

class A implements \ArrayAccess
{
    private $array;
    public function __construct()
    {
        $this->array = array("one"=>1, "two"=>2, "three"=>3);
    }
    public function WhatDoesThisArray($val1)
    {
        $this[$val1] = 99;
        $this[$val1];
        var_dump($this[$val1]);
        echo $this[$val1];
    }
    public function offsetExists($offset)
    {
        echo "call offsetExists\n";
    }
    public function offsetGet($offset)
    {
        echo "call offsetGet($offset)\n";
        return $this->array[$offset];
    }
    public function offsetUnset($offset)
    {
        echo "call offsetUnset\n";
    }
    public function offsetSet($offset, $value)
    {
        echo "call offsetSet\n";
        $this->array[$offset] = $value;
    }
}

/* Test */
$testClass = new A();
$testClass->WhatDoesThisArray("two");

/* Result */
call offsetSet
call offsetGet(two)
call offsetGet(two)
int(99)
call offsetGet(two)
99

в классе, подобном [Класс AImplements \ ArrayAccess]

$ this [$ var]; означает $ this-> offsetGet ($ var);

$ this [$ var] = $ value; означает $ this-> offsetSet ($ var, $ value);

Надеюсь, это помогло.Спасибо, Хавенард!

0 голосов
/ 26 апреля 2018

$ это показатель общеклассовой переменной.Судя по внешнему виду кода, класс расширяет контейнер и реализует контейнер иконок, поскольку у него нет конструктора в классе, который вы сами себе показали, скорее всего, в классе, который он расширяет.Существует также класс registerParameter, который, вероятно, вызывается перед классом registerService

public function registerParameter($name, $value) {
    $this[$name] = $value;
}

Его цель - передать новые значения в переменную, извлеченную из регистра службы

...