我有几个共享公共变量的函数。但是我不想继续在所有函数之间传递这些变量,因为这意味着所有函数都会有很多参数,而且我觉得很难阅读。
所以我想只为这些函数定义'全局'变量,如下所示:
$varA;
$varB;
$varC;
function funcA() {
..
}
function funcB() {
..
}
function funcC() {
..
}
与funcA的丑陋方式相反,声明变量和函数在它们之间传递它们(导致每个函数有许多参数)。
但是我希望变量不是程序中所有文件的全局变量。只能在此文件中访问。
实现这样的目标的最佳或最常见的方法是什么?
答案 0 :(得分:1)
如果你真的不想构建对象,但只想拥有一个私有作用域,你可以使用静态类:
<?php
class Example {
private static $shared_variable;
/* disable the constructor to create a static class */
private function __construct() {}
static function funcA() {
self::$shared_variable = 'AVAILABLE HERE';
}
static function funcB() {
echo self::$shared_variable;
}
}
Example::funcA();
Example::funcB();
// echo Example::$shared_variable; // but not here
我添加了构造函数的私有delaration以防止创建对象(因此声明类静态)。
答案 1 :(得分:0)
我会创建一个类并将函数重构为方法,将变量重构为参数:
Class newClass
{
private $varA;
private $varB;
private $varC;
public function funcA()
{
$varB = $this->varB;
}
public function funcB()
{
$varC = $this->varC;
}
public function funcC()
{
$varA = $this->varA;
}
}
通过这种方式,您可以完全访问所有后续方法中的所有设置参数。您可以编写setter或创建构造函数来为参数添加值:
Class newClass
{
public function __construct($varA, $varB, $varC)
{
$this->varA = $varA;
$this->varB = $varB;
$this->varC = $varC;
}
}
这是我处理本地范围的方法。祝你好运!
答案 2 :(得分:0)
根据这些变量封装变量和函数的正确方法是使用类。
class MyClass
{
private $varA;
private $varB;
private $varC;
public function __construct($varA, $varB, $varC)
{
$this->varA = $varA;
$this->varB = $varB;
$this->varC = $varC;
}
public function funcA()
{
$localVarB = $this->varB;
}
public function funcB()
{
$localVarC = $this->varC;
}
public function funcC()
{
$localVarA = $this->varA;
}
}
要使用此类,您必须首先创建它的实例:
$classInstance = new MyClass("varA", "varB", "value");
$classInstance->funcA();
$classInstance->funcB();
...
有关php中类的更多信息,请访问:http://php.net/manual/en/keyword.class.php