我有一个数组的PHP,即
$var = array(
"var" => "var value",
"var2" => "var value1"
);
并且有另一个带有类的文件,即
class class1{
function fnc1(){
echo $var['var2'];
//rest of function here
}
}
现在如何在$var['var']
function fnc1()
答案 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
}
}