我希望能够访问全局变量,而无需重新声明每个函数。这是一个例子。
$mobile = 1;
class Database
{
private $connect;
function one($argumentarray)
{
global $mobile;
echo $mobile;
}
function two($argumentarray)
{
global $mobile;
echo $mobile;
}
function three($argumentarray)
{
global $mobile;
echo $mobile;
}
}
我有大约100个函数,我需要访问所有这些函数中的$mobile
变量。有没有办法在不必在每个函数中执行global $mobile
的情况下执行此操作?
答案 0 :(得分:2)
最好的方法是 NOT 使用全局。以一种没有全局变量的方式设计你的程序。就是这样。
想到一个简单的设计,可能看起来像:
class Configuration {
protected static $mobile = 1;
// let's say it's write protected -> only a getter.
public static mobile() {
return self::$mobile;
}
}
class Database {
// use the config value
function one() {
if(Configuration::mobile()) {
...
}
}
}
答案 1 :(得分:1)
使用$GLOBALS
数组。
$GLOBALS["mobile"]
或者您可以将变量存储在您的班级中 - 我认为这更干净。
答案 2 :(得分:1)
嗯,你可以这样做:
class Database
{
private $connect;
private $mobile;
function __construct() {
#assign a value to $mobile;
$this->mobile = "value";
}
function one($argumentarray)
{
echo $this->mobile;
}
function two($argumentarray)
{
echo $this->mobile;
}
function three($argumentarray)
{
echo $this->mobile;
}
}
答案 3 :(得分:1)
已经有5个答案,没人提到静态类变量。
在构造函数中复制变量将是浪费,不切实际且会损害可读性。如果您稍后需要更改此全局的值,该怎么办?每个对象都会被一个过时的复制值所困扰。这太傻了。
由于您无论如何都需要前缀来访问此“全局”,因此请将其设为self::
或Database::
而不是this->
:)。
它会
public
)在你的例子中:
class Database {
static private $mobile = "whatever";
function one($argumentarray)
{
echo self::$mobile;
}
function two($argumentarray)
{
echo self::$mobile;
}
function three($argumentarray)
{
echo self::$mobile;
}
}
如果您想允许来自外部的修改:
static private $mobile;
static function set_mobile ($val) { self::$mobile = $val; }
static function get_mobile ($val) { return self::$mobile; }
或
static public $mobile;
答案 4 :(得分:0)
可能是一个class属性,并使用构造函数设置它?
class myClass {
private $mobile;
/* ... */
}
在构造函数中,执行:
public function __construct() {
$this->mobile = $GLOBALS['mobile'];
}
然后使用:
$this->mobile
来自世界各地!
答案 5 :(得分:0)
将变量传递给构造函数,并设置类级变量。 然后可以使用$ this->
在varius方法中访问它$mobile = 1;
class Database
{
private $connect;
private $mobile
function __construct($mobile){
$this->mobile=$mobile;
}
function one($argumentarray)
{
echo $this->mobile;
}
function two($argumentarray)
{
echo $this->mobile;
}
function three($argumentarray)
{
echo $this->mobile;
}
}
$db = new Database($mobile);