PHP Laravel 使用应用程序 class 作为数组而不是使用属性
PHP Laravel using application class as an array instead of using attributes
好吧,我想知道他们如何将应用程序 class 用作数组
例如在应用程序文件中
vendor/laravel/framework/src/illuminate/Container/Application.php
在魔术方法中 __set 和 __get 他们使用 $this 作为数组
这是代码
/**
* Dynamically access container services.
*
* @param string $key
* @return mixed
*/
public function __get($key)
{
return $this[$key];
}
/**
* Dynamically set container services.
*
* @param string $key
* @param mixed $value
* @return void
*/
public function __set($key, $value)
{
$this[$key] = $value;
}
但我不明白这是如何工作的,没有任何错误
我试过类似的东西,但它给了我以下错误
这是我的代码
class Container{
public function __get($key){
return $this[$key];
}
public function __set($key,$val){
$this[$key] = $val;
}
}
$app = new Container();
$app->test = 'ok';
echo $app->test;
致命错误:无法在 C:\xampp\htdocs\test\test.php 第 10
行中将容器类型的对象用作数组
有什么解释吗?
顺便说一句,我正在使用 laravel v4.2.12
Laravel 的 Illuminate\Container\Container
class 实现了 PHP 的 ArrayAccess 接口,它为 class 提供数组访问语法.要实现此接口,您必须提供 offsetExists()
、offsetGet()
、offsetSet()
和 offsetUnset()
方法的实现。一旦您的 class 正确实现了 ArrayAccess 接口,您就可以使用数组访问语法。
这只是 ArrayAccess 实现的一个示例,但您可以尝试这样的操作:
// note the implementation
class Container implements ArrayAccess {
protected $data = array();
public function offsetExists($offset) {
return array_key_exists($offset, $this->data);
}
public function offsetGet($offset) {
return $this->data[$offset];
}
public function offsetSet($offset, $value) {
$this->data[$offset] = $value;
}
public function offsetUnset($offset) {
unset($this->data[$offset]);
}
public function __get($key) {
return $this[$key];
}
public function __set($key, $val) {
$this[$key] = $val;
}
}
$app = new Container();
$app->test = 'ok';
echo $app->test.PHP_EOL.PHP_EOL.print_r($app, true);
您还可以查看 Illuminate\Container\Container
实现,了解 Laravel 实际上是如何实现的。
好吧,我想知道他们如何将应用程序 class 用作数组
例如在应用程序文件中
vendor/laravel/framework/src/illuminate/Container/Application.php
在魔术方法中 __set 和 __get 他们使用 $this 作为数组
这是代码
/**
* Dynamically access container services.
*
* @param string $key
* @return mixed
*/
public function __get($key)
{
return $this[$key];
}
/**
* Dynamically set container services.
*
* @param string $key
* @param mixed $value
* @return void
*/
public function __set($key, $value)
{
$this[$key] = $value;
}
但我不明白这是如何工作的,没有任何错误
我试过类似的东西,但它给了我以下错误
这是我的代码
class Container{
public function __get($key){
return $this[$key];
}
public function __set($key,$val){
$this[$key] = $val;
}
}
$app = new Container();
$app->test = 'ok';
echo $app->test;
致命错误:无法在 C:\xampp\htdocs\test\test.php 第 10
行中将容器类型的对象用作数组有什么解释吗?
顺便说一句,我正在使用 laravel v4.2.12
Laravel 的 Illuminate\Container\Container
class 实现了 PHP 的 ArrayAccess 接口,它为 class 提供数组访问语法.要实现此接口,您必须提供 offsetExists()
、offsetGet()
、offsetSet()
和 offsetUnset()
方法的实现。一旦您的 class 正确实现了 ArrayAccess 接口,您就可以使用数组访问语法。
这只是 ArrayAccess 实现的一个示例,但您可以尝试这样的操作:
// note the implementation
class Container implements ArrayAccess {
protected $data = array();
public function offsetExists($offset) {
return array_key_exists($offset, $this->data);
}
public function offsetGet($offset) {
return $this->data[$offset];
}
public function offsetSet($offset, $value) {
$this->data[$offset] = $value;
}
public function offsetUnset($offset) {
unset($this->data[$offset]);
}
public function __get($key) {
return $this[$key];
}
public function __set($key, $val) {
$this[$key] = $val;
}
}
$app = new Container();
$app->test = 'ok';
echo $app->test.PHP_EOL.PHP_EOL.print_r($app, true);
您还可以查看 Illuminate\Container\Container
实现,了解 Laravel 实际上是如何实现的。