Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.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从类函数中访问外部$var_Php_Global Variables - Fatal编程技术网

PHP从类函数中访问外部$var

PHP从类函数中访问外部$var,php,global-variables,Php,Global Variables,在PHP中,如何在类的函数中使用外部$var?例如,假设$some_external_var设置为true,则 class myclass { bla .... bla .... function myfunction() { if (isset($some_external_var)) do something ... } } $some_external_var =true; $obj = new myclass(); $obj->myfunction(); 类m

在PHP中,如何在类的函数中使用外部$var?例如,假设$some_external_var设置为true,则

class myclass { bla .... bla .... function myfunction() { if (isset($some_external_var)) do something ... } } $some_external_var =true; $obj = new myclass(); $obj->myfunction(); 类myclass{ 布拉。。。。 布拉。。。。 函数myfunction(){ 如果(isset($some\u external\u var))做某事。。。 } } $some_external_var=true; $obj=新的myclass(); $obj->myfunction();
谢谢

Global$some\u external\u var

function myfunction() { Global $some_external_var; if (!empty($some_external_var)) do something ... } } 函数myfunction(){ 全球$some_外部变量; 如果(!empty($some\u external\u var))执行某些操作。。。 } }
但由于Global会自动设置它,请检查它是否为空。

这是糟糕的软件设计。为了使类正常工作,需要为其提供数据。因此,将该外部变量传递到类中,否则将创建不必要的依赖项

为什么不在uu construct()期间传递此变量,并使对象在构造期间所做的事情以该变量的真值为条件?

您需要在函数内部使用关键字,使外部变量对该函数可见

例如:

$my_var_2 = 'glop';

function test_2()
{
    global $my_var_2;
    var_dump($my_var_2);  // string 'glop' (length=4)
}

test_2();
您还可以使用
$GLOBALS
数组,该数组即使在函数内部也始终可见


但是通常认为使用全局变量不是一个好的实践:您的类不应该依赖于某种可能存在或不存在的外部内容


更好的方法是将所需的变量作为参数传递给方法本身,或传递给类的构造函数…

使用setter和getter,或者可能是集中式配置,如:

function config()
{
  static $data;

  if(!isset($data))
  {
    $data = new stdClass();
  }

  return $data;
}

class myClass
{
    public function myFunction()
    {
        echo "config()->myConfigVar: " . config()->myConfigVar;
    }
}
以及如何使用它:

config()->myConfigVar = "Hello world";

$myClass = new myClass();
$myClass->myFunction();

在较新版本的PHP中,您甚至不需要_construct()-您可以使用类的名称创建一个函数,它的行为就像构造函数一样。例如,假设您有一个名为TestClass TestClass{private x;function TestClass(y){this->x=y;}}的类,这将是一个有效的构造函数。但是我同意…我会把它传递给构造函数。乔·摩根,我很确定旧版本不支持_构造魔法方法,并且要求构造函数共享类的名称。啊,愚蠢的半价。这就是
\uu构造
的神奇方法。我是如何知道他的类的名称的?谢谢大家,它不是一个依赖于类的$var,而且很少在一个领域使用。基本上,这个变量用于包含函数输出的另一个文件。