使用静态类

时间:2015-09-16 10:46:23

标签: php

我目前正在开展一个项目,我必须使用大型数组。巨大的,我的意思是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行,这不是一个选项。

3 个答案:

答案 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];
    }
}