我怎样才能在php类中包含php文件

时间:2011-04-07 09:16:00

标签: php

我有一个数组的PHP,即

$var = array(
   "var" => "var value",
   "var2" => "var value1"
);

并且有另一个带有类的文件,即

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

现在如何在$var['var']

中的类文件中获取function fnc1()

6 个答案:

答案 0 :(得分:1)

您可以将其作为参数传递,或使用global关键字将其置于当前范围内。 但是,不建议使用global,请尝试将其作为参数传递。

答案 1 :(得分:1)

将其作为参数传递?

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

在你的另一个文件中,以你的数组作为参数调用这个类方法。

答案 2 :(得分:1)

来自:http://php.net/manual/en/function.include.php

  

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

所以你可以做到

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

和其他人一样,你不想这样做,因为它会在你班级的文件系统中引入dependency。如果您的方法需要这些变量,那么将它们注入method arguments 或将它们传递给构造函数并使它们成为属性(如果您更经常需要它们)。这称为Dependency Injection,从长远来看,它可以使您的代码更易于维护,例如做

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);

答案 3 :(得分:0)

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

示例:

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

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

答案 4 :(得分:0)

@Vindia:我也更喜欢参数风格,但建议使用类型提示或简单检查以避免在访问* 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'];
    }
}

答案 5 :(得分:-1)

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