Php 如何在类方法内部正确使用全局变量

Php 如何在类方法内部正确使用全局变量,php,Php,目前,我正在重新编写一些代码,这些代码是我目前编写的,如下所示: <?php global $foo; $foo = "foo"; class foo{ function bar(){ global $foo; return $foo."bar"; } } $class = new foo(); echo foo->bar(); //returns 'foobar'; ?> 这个很好用。我的问题是,这是包含变量的正确方法吗?我的一些

目前,我正在重新编写一些代码,这些代码是我目前编写的,如下所示:

<?php
global $foo;
$foo = "foo";

class foo{
   function bar(){
      global $foo;
      return $foo."bar";
   }
}

$class = new foo();
echo foo->bar();
//returns 'foobar';
?>


这个很好用。我的问题是,这是包含变量的正确方法吗?我的一些类文件有20个以上的全局变量,这些变量必须在使用它们的每个方法中重新定义为全局变量。

尽可能避免使用全局变量。我不想在这里重复为什么,因为有很多答案解释了为什么这被认为是一种不好的做法()

相反,将类中所需的变量传递给构造函数,如:

class foo{

   protected $foo;

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

   public function bar(){
      return $this->foo . "bar";
   }
}

$foo = "foo";
$class = new foo($foo);
echo foo->bar();

尽可能避免使用全局变量。我不想在这里重复为什么,因为有很多答案解释了为什么这被认为是一种不好的做法()

相反,将类中所需的变量传递给构造函数,如:

class foo{

   protected $foo;

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

   public function bar(){
      return $this->foo . "bar";
   }
}

$foo = "foo";
$class = new foo($foo);
echo foo->bar();


你不能在类外将变量声明为“public”,所以我怀疑这是否“很好”:)我的意思是全局的,而不是公共的……很抱歉,我是个白痴。@HydraIO-你不是白痴,你是人类。好。。。人类是白痴,所以我想你是对的……这就是参数的用途。使用这样的全局变量不是一个好的做法,可能会变得非常笨拙。全局变量本身并不坏(记住
$\u get
?)。但是20听起来像是错误设计,或者滥用状态变量,或者替代参数或业务对象。你的例子太抽象了,无法给出正确的建议。你不能在类外将变量声明为“public”,所以我怀疑这是否“很好”:)我的意思是全局的,而不是公共的……很抱歉,我是个白痴。@HydraIO-你不是白痴,你是人类。好。。。人类是白痴,所以我想你是对的……这就是参数的用途。使用这样的全局变量不是一个好的做法,可能会变得非常笨拙。全局变量本身并不坏(记住
$\u get
?)。但是20听起来像是错误设计,或者滥用状态变量,或者替代参数或业务对象。您的示例过于抽象,无法给出正确的建议。或者将其作为参数传递给
bar()
。这假设您在构造类时有范围使用
$foo
。出于好奇,我可以在扩展
foo
的类中使用
parent::$foo
?如果他只在
bar()
中需要它,那么是的,没有理由将其声明为属性@Hydra IO:子类将从父类继承任何公共或受保护的属性,因此您可以使用
$this->foo以相同的方式访问它。这是一个完美的解决方案。谢谢@OneTrickPonyOr,或者将其作为参数传递到
bar()
。这假设您在构造类时有范围使用
$foo
。出于好奇,我可以在扩展
foo
的类中使用
parent::$foo
?如果他只在
bar()
中需要它,那么是的,没有理由将其声明为属性@Hydra IO:子类将从父类继承任何公共或受保护的属性,因此您可以使用
$this->foo以相同的方式访问它。这是一个完美的解决方案。谢谢@OneTrickPony