如何从配置文件中正确输出设置

时间:2018-04-11 18:52:51

标签: php

我正在尝试将php配置文件包含到我的main,index.php文件中,但我遇到了两个问题:

1)我不知道如何正确构建数组并输出“key”的理想“值”。例如:

function config() {
  return $settings = array(
    'url' => 'https://example.com',
    'title' = > 'My dynamic website'
  }
}

以上代码是否正确?例如,如何回显网址(或者输出网址的最佳方式是什么)?

2)我还想过制作一个输出所需值的函数,但我怀疑这是正确的方法。我试过这个并且有效:

function myWebsiteURL() {
  echo 'https://example.com'
}

然后我在需要时调用了这个函数。

在安全性和性能方面做出这类事情的正确方法是什么......我真的刚刚开始,但我想从一开始就以正确的方式编写代码。

2 个答案:

答案 0 :(得分:1)

就个人而言,我会实现ArrayAccessCountable并使用ArrayObject进行存储,然后执行其他操作,这将允许类的完全灵活性,包括值可以作为数组或作为数组访问一个对象,计数,加上额外的糖,如输出为json(可能是js),或者干净的print_r用于调试。

<?php
class Config implements ArrayAccess, Countable
{
    /**
     * @var ArrayObject
     */
    private $storage;

    /**
     * @param array $preset
     */
    public function __construct($preset)
    {
        $this->storage = new ArrayObject($preset);
        $this->storage->setFlags(
            ArrayObject::STD_PROP_LIST | ArrayObject::ARRAY_AS_PROPS
        );
    }

    /**
     * ArrayAccess offsetGet (getter).
     *
     * @param string $index
     */
    public function offsetGet($index)
    {
        return isset($this->storage->{$index}) ? $this->storage->{$index} : null;
    }

    /**
     * ArrayAccess offsetSet (setter).
     *
     * @param string $index
     * @param mixed  $value
     */
    public function offsetSet($index, $value)
    {
        if (is_null($index)) {
            $this->storage[] = $value;
        } else {
            $this->storage->{$index} = $value;
        }
    }

    /**
     * ArrayAccess offsetExists (isset).
     *
     * @param string $index
     */
    public function offsetExists($index)
    {
        return isset($this->storage->{$index});
    }

    /**
     * ArrayAccess offsetUnset (unset).
     *
     * @param string $index
     */
    public function offsetUnset($index)
    {
        unset($this->storage->{$index});
    }

    /**
     * Magic method (getter).
     *
     * @param string $index
     */
    public function __get($index)
    {
        return $this->offsetGet($index);
    }

    /**
     * Magic method (setter).
     *
     * @param string $index
     * @param mixed  $value
     */
    public function __set($index, $value)
    {
        return $this->offsetSet($index, $value);
    }

    /**
     * Magic method (isset).
     *
     * @param string $index
     */
    public function __isset($index)
    {
        return $this->offsetExists($index);
    }

    /**
     * Magic method (unset).
     *
     * @param string $index
     */
    public function __unset($index)
    {
        return $this->offsetUnset($index);
    }

    /**
     * Magic method (as function invoker).
     *
     * @param mixed  $arguments
     */
    public function __invoke(...$arguments)
    {
        if (isset($this->storage->{$arguments[0]})) {
            return $this->storage->{$arguments[0]};
        }
    }

    /**
     * Magic method (toString well json).
     */
    public function __toString()
    {
        $return = [];
        foreach ($this->storage as $key => $value) {
            $return[$key] = $value;
        }
        return json_encode($return, JSON_PRETTY_PRINT);
    }

    /**
     * Magic method (override print_r/var_dump).
     */
    public function __debugInfo()
    {
        $return = [];
        foreach ($this->storage as $key => $value) {
            $return[$key] = $value;
        }
        return $return;
    }
    /**
     * Implements Countable
     */
    public function count()
    {
        return $this->storage->count();
    }
}


$config = new Config([
    'url' => 'https://example.com',
    'title' => 'My dynamic website'
]);

echo $config->url.PHP_EOL;
echo $config['title'].PHP_EOL;
echo count($config).PHP_EOL;
echo print_r($config, true).PHP_EOL;
echo $config.PHP_EOL;

https://3v4l.org/Cfd4t

<强>结果:

https://example.com
My dynamic website
2
Config Object
(
    [url] => https://example.com
    [title] => My dynamic website
)

{
    "url": "https:\/\/example.com",
    "title": "My dynamic website"
}

答案 1 :(得分:0)

您有一些语法错误(提前更正):

<?php

function config() {
  return $settings = array(
    'url' => 'https://example.com',
    'title' => 'My dynamic website'
  );
}

echo config()['url'];

输出:

https://example.com

不需要赋值给变量$ settings,你只需要返回一个数组。