如何将硬编码数组数据定义为PHP框架的一部分


How to define hardcoded array data as part of a PHP framework?

例如50个美国。现在我只在一个函数中使用50个状态:

函数getStateInput(){$states=数组('AL'=>'Alaba','AK'=<'Alaska','AZ'=>'亚利桑那州等);//使用$states}

或者,您可以在自己的states.php中定义$states,然后像这样使用它:

函数getStateInput(){include("states.php");//使用$states}

但出于某种原因,这让我很害怕,因为我正在使用include来定义局部函数变量。另一种方法是在states.php中将状态数组分配给超全局(例如,我可以使用$_ENV['states'])。然后我可以去:

include('states.php');函数getStateInput(){//使用$_ENV["状态"]}

这是最好的方法之一,还是有其他更好的方法?

常见的方法是分离关注点。例如,你可以有自己的类和地址相关的方法。这个类将是存储关于可能状态的信息的自然位置,比如:

class Address {
    static STATES = array(
        'AL' => 'Alabama',
        'AK' => 'Alaska',
        'AZ' => 'Arizona',
        // ...
    );
}
// and then you can use it somewhere like that:
echo Address::$STATES['AL'];

为什么不让include文件有一个返回状态数组的函数呢。然后在其他代码中使用该数组。这样就不会处理任何范围变量。

// states.php
function getStates() {
    return $states;
}
// other.php
function getStateInput() {
     include('states.php');   
     $states = getStates();
     // Do stuff with $states
}

在您的include.php文件中(您必须包含此文件。在函数声明之前包含它):

$states = array('GA' => 'Georgia', 'SC' => 'South Carolina');

在您的脚本上:

include("include.php");
global $states;
function GetStateInput() {
   ///States are already available as $states
}

祝你好运!

我可能会这样做

include.php

<?php
$array = array();
$array['foo'] = 'bar';
$array['oof'] = 'rab';
... etc.
return $array;
?>

框架.php

<?php
// previous stuff
function getStateInput()
{
    static $a = NULL;
    if($a === NULL)
        $a = include('include.php');
    // do whatever
    return $a;
}
// other stuff
?>

要么这样,要么只在函数中定义数组。这将取决于数组的大小以及api的其余部分的大小。如果将数组移到外部文件中的维护变得容易多了,那就去做吧。如果你在多个不同的函数或方法中使用数组,那就把它取出来。等等。你知道演习。

PHP优化了文件包含,所以如果不动态包含,就不用太担心性能。