php - 在 PHP 中正确使用变量作用域

标签 php variables global-variables scope

我有一些变量需要在比我最初想象的更多的函数中访问。

将它们包含在我不断增加的功能列表中的最佳方式是什么?

我有类似的东西

$site = 'a';
$admin = 'b';
$dir = 'c';
$ma_plug = 'd';
$base = 'e';
//Etc.

在我的大量功能中,我几乎需要所有这些。我最初是在做

function a(){
    global  $site, $admin, $dir, $ma_plug, $base;
    //Write the A function
}
function b(){
    global  $site, $admin, $dir, $ma_plug, $base;
    //Write the B function
}

那太棒了,直到我意识到我要编写的函数比我最初想象的要多。

将所有这些变量放入(几乎)每个函数的范围内的最佳方法是什么?就像我做的那样?或者像使用常量之类的东西?如果可能的话,我想避免使用 session()

最佳答案

如果这些函数是唯一使用这些变量的函数,那么创建一个这些变量在其中是本地变量的类可能会更好。

这样你就不会污染全局命名空间并且需要在每个函数中使用 global 关键字。

例如:

class MySite {
    private $site;
    private $admin;
    private $dir;
    private $ma_plug;
    private $base;

    function __construct($site, $admin, $dir, $ma, $base) {
       $this->site = $site;
       $this->admin = $admin;
       //...
    }
}

关于php - 在 PHP 中正确使用变量作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14144491/

相关文章:

swift - 从 TableView 生成全局变量计数器

php - ffmpeg 输出 + 问题

php - ini_set 无法设置 session 变量 – PHP 7.2.0 及更高版本

javascript - Google 脚本中的全局变量(电子表格)

java - Android:静态变量和移动复杂数据

java - 从 Java 中的另一个类访问字符串

.net - 由于 2 秒超时,并非所有 native 全局变量都在混合模式 .Net 应用程序中被破坏

php - Symfony2 - bundle 中的 Doctrine 连接配置

php - 如何在从 MySQL 数据库导入时而不是之前进行文本换行?

sql - 带有 case 语句的 Transact-SQL 局部变量