我目前正在开展一个项目,我必须使用大型数组。巨大的,我的意思是1k或更多元素。由于这些是很多数组而且我有时搞砸了,所以我决定用静态函数创建一个类,这样我就可以调用函数来使整个项目更容易阅读。这就是我目前所拥有的:
ArrayAccess.class.php:
require "dep/arrays/elements.php";
class ArrayAccess {
public static function get_value_from_element($element) {
return $elements[$element];
}
}
elements.php:
<?php
$elements = array(
"sam" => 6, ... and so on ...
我只是希望能够在我的项目中使用ArrayAccess::get_value_from_element($element)
。它比任何地方的所有这些索引都容易阅读。但是,数组是在elements.php
文件中定义的 - 我不能在课堂上使用它。
那我怎么能在班上访问数组呢?请注意,我无法将其复制到类中,文件大于400k行,这不是一个选项。
答案 0 :(得分:2)
您可以return
来自include的值(或在这种情况下需要)并在第一次调用函数时将其存储到静态属性。
elements.php:
<?php
return array("sam" => 6, ...);
DataAccess.php:
class DataAccess {
private static $elements = array();
public static function get_value_from_element($element) {
if(self::$elements === array()) {
self::$elements = require "elements.php";
}
return self::$elements[$element];
}
}
您还应该避免命名类ArrayAccess
,因为它已经在PHP中exists。
答案 1 :(得分:1)
在elements.php
<?php
return array( // use return so you can retrieve these into a variable
"sam" => 6, ... and so on ...
然后在课堂上
<?php
class ArrayAccess {
public static $elements = null; // set up a static var to avoid load this big array multiple times
public static function get_value_from_element($element) {
if(self::$elements === null) { // check if null to load it from the file
self::$elements = require('elements.php');
}
return self::$elements[$element]; // there you go
}
}
如果你不想每次都在getter中执行if
语句,你应该在使用getter之前找到一些将文件加载到静态变量的地方。
答案 2 :(得分:0)
另一种方法是在您的类中将$ elements声明为全局:
require "dep/arrays/elements.php";
class ArrayAccess {
public static function get_value_from_element($element) {
global $elements;
return $elements[$element];
}
}