Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.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类中包含php文件_Php - Fatal编程技术网

如何在php类中包含php文件

如何在php类中包含php文件,php,Php,我有一个带有数组的php,即 $var = array( "var" => "var value", "var2" => "var value1" ); 还有另一个类文件,即 class class1{ function fnc1(){ echo $var['var2']; //rest of function here } } 现在,如何在函数fnc1()的类文件中获取$var['var'],您可以将其作为参数传递,或者使用

我有一个带有数组的php,即

$var = array(
   "var" => "var value",
   "var2" => "var value1"
);
还有另一个类文件,即

class class1{
   function fnc1(){
        echo $var['var2'];
       //rest of function here
   }
}

现在,如何在
函数fnc1()

的类文件中获取
$var['var']
,您可以将其作为参数传递,或者使用
全局
关键字将其放入当前范围。
但是,不鼓励使用global,请尝试将其作为参数传递。

您可以在包含的文件中使用
global$var
,但这实际上是一种不好的做法,因为在包含的文件之前,另一个脚本可能会重新定义
$var
的值/类型

例如:

class class1{
   function fnc1(){
      global $var;
      echo $var['var2'];
      //rest of function here
   }
}

更好的解决方案是将
$var
作为参数传递给
fnc1()
,甚至传递给
class1::\u construct()

作为参数传递

class class1{
  function fnc1($var) {
    echo $var['var2'];
  }
}
在另一个文件中,使用数组作为参数调用该类方法。

来自:

包含文件时,它包含的代码将继承包含文件所在行的变量范围。从该点开始,调用文件中该行可用的任何变量都将在被调用文件中可用。但是,包含文件中定义的所有函数和类都具有全局作用域

所以你可以

class class1
{
   function fnc1()
   {
        include 'thefile.php'
        echo $var['var2'];
       //rest of function here
   }
}
但是像其他人之前指出的那样,您不想这样做,因为它在您的类中的文件系统上引入了一个。如果您的方法需要这些变量才能工作,那么将它们作为注入,或者将它们传递到构造函数中,并使它们成为属性(如果您更经常需要它们)。这将被调用,从长远来看,它将使您的代码更易于维护,例如do

class class1
{
    private $data;
    public function __construct(array $var)
    {
        $this->data = $var;
    }
    function fnc1()
    {
        echo $this->data['var2'];
       //rest of function here
   }
}
然后呢

$obj = new class1($var);
echo $obj->fnc1();
或者要求在调用时将数据传递到方法中

class class1
{
    function fnc1(array $var)
    {
        echo $var['var2'];
       //rest of function here
   }
}
然后

$obj = new class1;
$obj->fnc1($var);

@Vindia:我也更喜欢Argumat样式,但建议使用类型提示或简单检查,以避免在访问*non_array*['var2']时出现警告:

// acccepts array only. Errors be handled outside
function fnc1(Array $var) {
    echo $var['var2'];
}


// accepts any type:
function fnc1(Array $var) {
    if (is_array($var)) {
        echo $var['var2'];
    }
}

当然,但这取决于开发者。它可能是始终使用数组调用的内部函数。(您还可以在
回送
之前添加
数组\u key\u exists()
)。
// acccepts array only. Errors be handled outside
function fnc1(Array $var) {
    echo $var['var2'];
}


// accepts any type:
function fnc1(Array $var) {
    if (is_array($var)) {
        echo $var['var2'];
    }
}