2012-08-05 57 views
3

例如50个美国州。现在我用的是美国50个州中只有一个功能:如何将硬编码数组数据定义为PHP框架的一部分?

function getStateInput() { 
    $states = array('AL' => 'Alabama', 'AK' => 'Alaska', 
     'AZ' => 'Arizona', etc); 

    //use $states 
}

另外,您可以在自己的states.php定义$states,然后用它是这样的:

function getStateInput() { 
    include('states.php'); 

    //use $states 
}

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

include('states.php'); 

function getStateInput() { 
    //use $_ENV['states'] 
}

是那些最好的之一还是有另一种更好的方法?

回答

4

常见的方法是分开关注点。你可以例如。有你自己的类与地址相关的方法。这个类是存储有关可能的状态信息的天然场所,这样的:

class Address { 
    static STATES = array(
     'AL' => 'Alabama', 
     'AK' => 'Alaska', 
     'AZ' => 'Arizona', 
     // ... 
    ); 
} 

// and then you can use it somewhere like that: 
echo Address::$STATES['AL']; 
+3

我更喜欢将静态方法用于全局变量。全球阵列是soo 1990年的 – localhost 2012-08-05 23:09:04

+0

这很好。我看到的唯一问题是您必须为包含类创建一个额外的名称,并且您现在还必须决定是否有其他数据可能适合该类。 – Ryan 2012-08-05 23:10:10

+0

@Ryan - 这真的是个问题吗?如今你的整个应用程序应该是OOP,如果你还在使用过程式编程,你需要重新考虑你的应用程序设计。 – Geoffrey 2012-08-05 23:12:37

1

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

// states.php 
function getStates() { 
    return $states; 
} 

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

我喜欢这个想法,但是我会在getStateInput()之外包含states.php,因为所有函数都是全局的,无论你在哪里定义它们。 – Ryan 2012-08-05 23:03:01

+0

静态类成员会更好,因为它会在初始化时创建程序,而不是每次调用函数。 – Geoffrey 2012-08-05 23:03:57

0

在你include.php文件(必须包含这个文件包括它之前,你的函数声明。):

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

在你的脚本:

include("include.php"); 
global $states; 

function GetStateInput() { 
    ///States are already available as $states 
} 

祝你好运!

+1

全局变量的使用是不好的做法,不推荐使用,因为如果您在其他地方重新使用变量来存储其他意外事件,可能会导致意料之外的问题。请使用静态类成员,因为这会将其保留在类中,但仍可在全局访问。 – Geoffrey 2012-08-05 23:07:01

+0

除非你完全无法避免,否则你不应该在你的PHP代码中使用'global'。 – crmpicco 2014-02-27 14:35:45

0

我可能会做这样的

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优化文件包含,所以如果不包含动态的话,不要担心性能太大。

+0

我认为在类上使用静态数组更清晰,因为那样您就不必为了使用而声明变量。 – Ryan 2012-08-06 01:09:09

+0

@Ryan你确实认识到localhost的评论是讽刺吗?事实上,使用上面的代码不会混淆你的全局名称空间,因为$ array变量对于它定义的函数是本地的(include在函数中,因此$ array是函数本地的)。使用return语句,您不需要知道包含文件中的任何变量名称。 – dualed 2012-08-06 07:42:44

相关问题