Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php中限制include文件中变量的范围_Php - Fatal编程技术网

在php中限制include文件中变量的范围

在php中限制include文件中变量的范围,php,Php,在我设计的应用程序中,我面临着各种相互冲突的问题 e、 g在我的一个web应用程序页面中,有两个模块 i:标记云模块 ii:照片列表模块 两者都有变量$listOrder,例如,当脚本处理模块“标记云化时,$listOrder=“tagid desc”将其设置为初始未设置 if(!isset($listOrder)) $listOrder = "tagid desc"; 当脚本再次到达照片列表模块时,它将尝试处理以下行,如上图所示。as变量已在标记云列表中设置。它将“tagid d

在我设计的应用程序中,我面临着各种相互冲突的问题

e、 g在我的一个web应用程序页面中,有两个模块

i:标记云模块 ii:照片列表模块

两者都有变量$listOrder,例如,当脚本处理模块“标记云化时,$listOrder=“tagid desc”将其设置为初始未设置

if(!isset($listOrder))
   $listOrder = "tagid desc";   
当脚本再次到达照片列表模块时,它将尝试处理以下行,如上图所示。as变量已在标记云列表中设置。它将“tagid desc”保留为值。这会导致sql错误,因为“tagid”不是照片列表的字段

这是一个简单的例子,每个页面中有4到5个以上的模块,其中包含大量类似的变量,这会导致冲突


我们是否可以在php中将变量的作用域限制在模块级以避免此类冲突。

是的,您可以。您可以创建类和名称空间(从PHP5.3开始)

如果您有这样一个类,您可以将变量和函数放入该类:

class Module1
{
  public $listOrder = 'tagid desc';

  public function generateSQL()
  {
    return 'select * from YourTable order by ' . $this->listOrder;
  }
}
现在,您可以创建模块的一个实例(甚至可以创建多个实例),并调用其方法:

$module1 = new Module1;
$module1->listOrder = 'name asc'; // Override default sorting
$sql = $module1->generateSQL();

这只是一个可能性的小例子,但我认为关于类/oop的完整教程在这里是不合适的

在类中,它可以被限制,但我在include文件中面临问题,该文件负责直接或通过ajax参数获取值。然后,这些值进一步传递给类以生成适当的输出。或者,如果我取消设置模块范围内设置的所有变量,则可以解决我的问题。包含文件也可以包含类。您应该尽可能少地在全局范围内放置。