如何将变量的范围限制为单个文件?

时间:2015-07-15 07:38:25

标签: php

我有几个共享公共变量的函数。但是我不想继续在所有函数之间传递这些变量,因为这意味着所有函数都会有很多参数,而且我觉得很难阅读。

所以我想只为这些函数定义'全局'变量,如下所示:

$varA;
$varB;
$varC;

function funcA() {
    ..
}

function funcB() {
    ..
}

function funcC() {
    ..
}

与funcA的丑陋方式相反,声明变量和函数在它们之间传递它们(导致每个函数有许多参数)。

但是我希望变量不是程序中所有文件的全局变量。只能在此文件中访问。

实现这样的目标的最佳或最常见的方法是什么?

3 个答案:

答案 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

相关问题