我正在尝试将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'
}
然后我在需要时调用了这个函数。
在安全性和性能方面做出这类事情的正确方法是什么......我真的刚刚开始,但我想从一开始就以正确的方式编写代码。
答案 0 :(得分:1)
就个人而言,我会实现ArrayAccess,Countable并使用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://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,你只需要返回一个数组。