Php 查找数组可以存储在类外吗?

Php 查找数组可以存储在类外吗?,php,oop,Php,Oop,我刚刚开始学习OOP,并在这个过程中转换一个现有的小站点。我有一个巨大的全球数组($countries),我在其中存储国家代码、两种不同语言的名称以及大约240个国家的国际呼叫代码。我想用方法创建一个类(Country),它可以从$countries中查找值。我需要将数组存储在类中,还是可以将其存储在单独的文件中?如果我可以将它放在一个单独的文件中,我将如何在我的方法中访问它?是的,从该文件返回数组,然后像这样使用它: $array = include('file.php') file.ph

我刚刚开始学习OOP,并在这个过程中转换一个现有的小站点。我有一个巨大的全球数组($countries),我在其中存储国家代码、两种不同语言的名称以及大约240个国家的国际呼叫代码。我想用方法创建一个类(Country),它可以从$countries中查找值。我需要将数组存储在类中,还是可以将其存储在单独的文件中?如果我可以将它放在一个单独的文件中,我将如何在我的方法中访问它?

是的,从该文件返回数组,然后像这样使用它:

$array = include('file.php')

file.php

<?php

return array(
'name' => 'Josh Smith'
);
<?php

$arr = include('file.php');
var_dump($arr);

您肯定应该存储类代码之外的国家/地区列表,以避免每次需要更新列表时更改源代码。根据您的用例,它可以是文件或数据库表

在构造查找类时,它应该获得从何处加载数据的信息

大概是这样的:

class CountryProvider {

    protected $countries = [];

    public function __construct($dataFile)
    {
        $this->loadDataFromFile($dataFile);
    }

    protected function loadDataFromFile($dataFile)
    {
        // load your file here into $countries property
    }

    public function findCountryByCode($code)
    {
        // do your lookup here
    }
}

$countryProvider = new CountryProvider('/path/to/your/file');
$country = $countryProvider->findCountryByCode('SOME_COUNTRY_CODE');

我是在类内部还是在调用该类的文件中这样做?您可以在任何需要数组的地方这样做。可能,如果您使用OOP,您会有一个方法来执行这样的功能,并且您可以相对轻松地从对象实例->getCountries()。因此,我会将该文件包含在getCountries()方法中?是的,这种关注点分离将意味着如果您的代码将来发生更改,您不必在多个位置更改文件名。你可以修改那个特定的函数。我想,首先,在答案中尝试一下我的方法,然后再把它变成面向对象的。是的,这就是我目前的做法。关键是我正在尝试将其转换为OOP。这是我的第一个类,所以我不确定是否可以在类和/或方法中包含文件。这是我的第一个类,所以我不确定你的意思。我该怎么做?
class CountryProvider {

    protected $countries = [];

    public function __construct($dataFile)
    {
        $this->loadDataFromFile($dataFile);
    }

    protected function loadDataFromFile($dataFile)
    {
        // load your file here into $countries property
    }

    public function findCountryByCode($code)
    {
        // do your lookup here
    }
}

$countryProvider = new CountryProvider('/path/to/your/file');
$country = $countryProvider->findCountryByCode('SOME_COUNTRY_CODE');