我正在阅读this code:
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 as array”goggled并再次阅读$this documentation,但没有找到解释此语法的内容。
答案 0 :(得分:1)
类SimpleContainer
扩展Pimple\Container
,它实现\ArrayAccess
,通过多种方法documented here为您的对象启用类似数组的语法。
答案 1 :(得分:0)
我进来是因为我想知道这一点。
当我看到Havenard的答案并进行测试后,我发现了。
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
在类似[A类实现\ ArrayAccess]
的类中$ this [$ var]; 意味着 $ this-> offsetGet($ var);
$ this [$ var] = $ value; 表示 $ this-> offsetSet($ var,$ value);
我希望能有所帮助。谢谢Havenard!
答案 2 :(得分:-1)
$这表示一个全班变量。通过代码的外观,类扩展容器并实现一个icontainer,因为它在你自己展示的类中没有构造函数,它最有可能在它扩展的类中。还有一个registerParameter类可能在registerService类
之前调用public function registerParameter($name, $value) {
$this[$name] = $value;
}
其目的是将新值推送到服务寄存器中拉出的变量