在PHP中归档私有变量

kay*_*ahr 2 php

是否可以在PHP脚本中定义私有变量,以便这些变量仅在这个单独的PHP脚本中可见而在其他地方不可见?我想要一个包含文件,它可以在不污染全局命名空间的情况下执行某些操作.它必须与PHP 5.2一起使用,因此PHP命名空间不是一个选项.这里没有使用OOP所以我不是在寻找私人班级成员.我正在寻找"有点全局"的变量,这些变量在当前脚本中是全局的,但在其他任何地方都没有.

在CI中可以使用static关键字来实现它,但在PHP中是否有类似的东西?

以下是"common.php"脚本的简短示例:

$dir = dirname(__FILE__);
set_include_path($dir . PATH_SEPARATOR . get_include_path());
// Do more stuff with the $dir variable
Run Code Online (Sandbox Code Playgroud)

当我在一些脚本中包含此文件时,$ dir变量在所有其他脚本中也是可见的,我不希望这样.那我怎么能阻止这个呢?

ale*_*lex 7

您可以做一些事情来阻止$dir后续文件

例1

set_include_path(dirname(__FILE__) . PATH_SEPARATOR . get_include_path());
Run Code Online (Sandbox Code Playgroud)

这是最明显的.

例2

$dir = dirname(__FILE__);
set_include_path($dir . PATH_SEPARATOR . get_include_path());
// work with $dir
unset($dir);
Run Code Online (Sandbox Code Playgroud)

在定义变量并使用它之后,只需取消设置变量.请注意,这将取消设置$dir包含此脚本之前使用的任何名称.

例3

define('DIR_THIS', dirname(__FILE__));

set_include_path(DIR_THIS . PATH_SEPARATOR . get_include_path());
Run Code Online (Sandbox Code Playgroud)

我不太可能重新定义像这样的全局常量.

例4

function my_set_include_path {
  $dir = dirname(__FILE__);
  set_include_path($dir . PATH_SEPARATOR . get_include_path());
  // Do more stuff with the $dir variable
  $my_other_var = 'is trapped within this function';
}

my_set_include_path();
Run Code Online (Sandbox Code Playgroud)

您可以在该函数中定义任意数量的变量,而不会影响全局命名空间.

结论

第一种方法是解决此问题的最简单方法,但是因为您想$dir再次使用,它可能并不理想.最后一个示例至少将该$dir(以及该函数中定义的任何其他内容)保留在全局命名空间之外.


Eri*_*rik 6

你要完成任何接近你想要的任何事情的唯一方法是将函数中包含文件中的所有内容包装起来,然后调用它.如果文件需要自己执行,你仍然可以

<?php
run_myfile()
function run_myfile() {
...
}
?>
Run Code Online (Sandbox Code Playgroud)

没有通用的方法可以将变量限定为仅限于名称空间,类或函数之外的文件.