标签:php scope arrays global-variables
我有一个.ini文件作为我项目的配置.现在我想让它随处可见. Here简化了我要做的事情:
<?php
$config = [];
$config['base_url'] = '/mypath/';
class myclass{
public function myfunc(){
print_r($config);
}
}
$obj = new myclass;
$obj->myfunc;
正如你在小提琴中所看到的,它抛出:
Notice: Undefined property: myclass::$myfunc in /in/iNZOv on line 14
注意到当我使用global关键字时,它会引发语法错误.
看,我可以像这样将数组传递给类:
$obj = new myclass($config);
public $config;
public function __construct($config)
{
$this->config = $config;
}
但我不能每次都为所有班级做到这一点.无论如何,我想知道,是否有可能在全球范围内使数组可访问?
解决方法:
我也不建议使用全局.容器一般都很好,但有时它太多了.这是一个带有静态变量和方法的简单解决方案.
class Config
{
public static $values = [
'base_url' => '/mypath/'
];
/**
* @param string $key
* @return null|string|int|mixed
*/
public static function get($key)
{
return empty(self::$values[$key]) ? null : self::$values[$key]; // alternatively you can throw an exception for a missing key.
}
}
class Foo
{
public function printConfig()
{
print_r(Config::$values);
}
}
(new Foo)->printConfig();
echo Config::get('base_url');
标签:php,scope,arrays,global-variables 来源: https://codeday.me/bug/20190622/1264536.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。