Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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 - Fatal编程技术网

在PHP类中使用外部变量

在PHP类中使用外部变量,php,Php,我对PHP类非常陌生,所以如果答案很明显,请原谅我。我试图弄清楚如何在类内部使用在类外部定义的变量。这是一个非常粗糙的例子 $myVar = 'value'; class myClass { private $class_var = $myVar; //REST OF CLASS BELOW } 我知道上面的方法不起作用,但如何在类中使用外部$myVar?尝试以下方法: $myVar = 'value'; class myClass { private $class_var;

我对PHP类非常陌生,所以如果答案很明显,请原谅我。我试图弄清楚如何在类内部使用在类外部定义的变量。这是一个非常粗糙的例子

$myVar = 'value';

class myClass {
  private $class_var = $myVar;
  //REST OF CLASS BELOW
}
我知道上面的方法不起作用,但如何在类中使用外部$myVar?

尝试以下方法:

$myVar = 'value';

class myClass {
  private $class_var;

  public function __construct($myVar) {
    $this->class_var=$myVar;
  }

  //REST OF CLASS BELOW
}

声明类时,您需要像这样传递
$myVar
$myClass=newmyclass($myVar)

每个函数都有自己的“作用域”。您可以通过在函数内将变量声明为全局变量来覆盖它,如下所示:

$myVar = 'value';

class myClass {
  public function __construct() {
    global $myVar;
    $this->class_var=$myVar;
  }
}
$myVar = 'value';

class myClass {
  public function myfunction() {
    global $myVar;
    echo $myVar;
  }
}
这将在对象实例中设置变量

但是,请注意,您可以在函数中直接使用它,而无需将其设置为类变量,如下所示:

$myVar = 'value';

class myClass {
  public function __construct() {
    global $myVar;
    $this->class_var=$myVar;
  }
}
$myVar = 'value';

class myClass {
  public function myfunction() {
    global $myVar;
    echo $myVar;
  }
}

把它交给构造器?你能给我举个例子吗?正如我所提到的,我对课程非常陌生,所以我仍然在学习细节。下面是一个例子,如果你想得到变量,你可以为它创建一个评估方法。为了记录在案,是David Chen首先进行了有问题的编辑,而不是PeeHaa。PeeHaa进行了一次意外编辑,然后将其回滚到David所做的编辑。随后,"战争"接踵而至。我同意额外的措辞是不必要的,David删除它是正确的,但我不希望看到这些类型的编辑导致大量的回滚。我认为这两个人应该停止跳探戈StackOverflow什么时候变成了什么?然后您可以在创建对象时将其传递给构造函数。。。授予。。。但这就是问题所在,不是吗?我想这不是你想要的。请看上面的评论。@Theurrican为什么你认为这是错误的。我对你的答案投了反对票,因为使用
global
是一种可怕的做法。所以请不要这样。@Thecurrican我认为我们不应该容忍或支持OP(或一般新用户)把所有东西都扔出窗外,而仅仅是
global
it。DI是一种策略,这是有原因的。@Thecurrican您关于类可能是静态的建议并没有通过给出的代码得到证实-没有
static
关键字,给对象属性一个初始值是构造函数的责任,正如您的答案和DaveChen的说明。我同意不提及
global
是一个错误,但它可能总是伴随着一些警告——例如,正如您所说,这可能是迁移旧代码的一种方式,而旧代码不能简单地去全球化。您可能想读一下:@PeeHaa埽 这是一个如此彻底的答案,我投票赞成将此问题作为该问题的重复问题结束,而不是重复讨论。此答案的前半部分是一个有用的补充,其中警告“这不是最佳解决方案,但可用于与现有代码集成”。后半部分只是鼓励了错误的做法——至少如果
全局
被约束到构造函数,那么您就限制了对该全局变量的引用数量,甚至可以在将来的某个时候将其迁移到DI。