充分利用多维数组的值,而不直接访问它

我有不同的配置设置多维数组。 下面是一个例子:

$这个 - >数据=阵列();

我想这样我创建一个getter这个数组是私有的:

public function getData(){ $args = func_get_args(); $x = $this->data; foreach($args as $arg) $x = $x[$arg]; return $x; }

我用它是这样的:

$value = $obj->getData('country', 'city', 'street');

一切工作正常,但问题是,它是5倍速度低于直接访问(100,000迭代测试):

$value = $obj->data['country']['city']['street'];

什么是做到这一点的最好方法是什么? 有没有什么办法,使这个变量只读或是否有更好的方式来访问它,而无需使用的foreach()?

--------------解决方案-------------

您可以创建的getter __get魔术方法:

public function __get($name) {
return $this->$name;
}

在这种方式,你可以得到保护和从同样的方式随时随地的私人性质,但将它们只是你的类中。

如果你只想要这个属性在这样的方式行事,只需使用条件:

public function __get($name) {
return $name === 'data' ? $this->data : null;
}

当然, __get较慢甚至有点那么getter方法,但它需要被访问一次所谓的data属性,对其中的任何子阵列每次访问都会以最快的速度直接访问(这意味着没有丑陋foreach迭代:))。

分类:php 时间:2015-03-15 人气:0
本文关键词: PHP,多维数组
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.265 (s). 10 q(s)