Массивы как объекты - PullRequest
       10

Массивы как объекты

0 голосов
/ 04 марта 2009

У меня есть метод, позволяющий мне использовать массив в качестве объекта?

У меня есть следующий код в моем основном классе

function  __construct()
{
        require 'config.php';
        $this->config = new PHPSO_Config();
}

где класс PHPSO_Config выглядит примерно так

class PHPSO_Config
{
    /**
     * The administrators email address
     */
    var $adminEmail = 'user@domain.tld'; //I'm using this email to test
}

так могу ли я выполнить то же самое и получить доступ к переменным конфигурации как к объекту, не создавая второй класс?

Ответы [ 5 ]

4 голосов
/ 04 марта 2009

Вы можете привести массив к объекту, используя

$myObject = (object) $myarray;

, таким образом, должно работать (не проверено) следующее:

function  __construct()
{
        require 'config.php';
        $this->config = (object) array("username" => "root");
}

тогда $ class-> config-> username должно работать.

1 голос
/ 04 марта 2009

Вы можете использовать перегрузку PHP5 , чтобы создать впечатление, что у вашего класса есть свойства, предоставляемые классом config, например, как то так:

class MyClass
{
    private $config;

    function  __construct()
    {
        require 'config.php';
        $this->config = new PHPSO_Config();
    }


    public function __get($name) {
        if (property_exists($this->config, $name)) {
            return $this->config->$name;
        }
        return null;
}

Затем делаем что-то вроде этого:

$config=new MyClass;
echo $config->adminEmail;

В результате вы увидите переменную-член adminEmail внутреннего класса конфигурации.

Это почти шаблон стратегии , где реализация класса во время выполнения может быть выбрана во время выполнения.

0 голосов
/ 04 марта 2009

Может быть, я что-то здесь упускаю, но вы пытаетесь заменить свой класс конфигурации массивом, а затем привести его к объекту? Звучит немного безумно для меня. Я бы просто имел конфиг класс, по-своему лучше дизайн.

Лучше не делать массивов, где у вас должны быть классы.

0 голосов
/ 04 марта 2009

Я не уверен, что именно вы хотите, но вы можете привести массив к объекту. Удостоверьтесь, что вы не используете числовые индексы, так как они не работают правильно;

$config = array('adminEmail' => 'user@domain.tld');
$this->config = (object)$config;
0 голосов
/ 04 марта 2009

Ну да

есть методика, которую лично я бы использовал:

вы создаете вызов файла как хотите (например, config.php) затем напишите это в качестве примера:

Когда бы вы ни захотели использовать эту информацию, вы должны просто поместить "require_once" config.php ";" выше вашего кода, как в index.php, и все определения будут на этой странице. Например, вы можете прочитать имя сервера базы данных, набрав $ DB_SERVER.

На вашем месте я бы придерживался этого, потому что вы можете использовать его повсюду в своем проекте и поддерживать его только из файла, облегчающего жизнь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...