简体   繁体   中英

PHP access external $var from within a class function

In PHP, how do you use an external $var for use within a function in a class? For example, say $some_external_var sets to true and you have something like

class myclass {
bla ....
bla ....

function myfunction()  {

  if (isset($some_external_var)) do something ...

   } 

}


$some_external_var =true;

$obj = new myclass();
$obj->myfunction();

Thanks

You'll need to use the global keyword inside your function, to make your external variable visible to that function.

For instance :

$my_var_2 = 'glop';

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

test_2();

You could also use the $GLOBALS array, which is always visible, even inside functions.


But it is generally not considered a good practice to use global variables: your classes should not depend on some kind of external stuff that might or might not be there !

A better way would be to pass the variables you need as parameters, either to the methods themselves, or to the constructor of the class...

Global $some_external_var;

function myfunction()  {
  Global $some_external_var;
  if (!empty($some_external_var)) do something ...

   } 

}

But because Global automatically sets it, check if it isn't empty.

that's bad software design. In order for a class to function, it needs to be provided with data. So, pass that external var into your class, otherwise you're creating unnecessary dependencies.

为什么不只在__construct()期间传递此变量,并以该变量的真值为条件使对象在构造期间执行的操作呢?

Use Setters and Getters or maybe a centralized config like:

function config()
{
  static $data;

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

  return $data;
}

class myClass
{
    public function myFunction()
    {
        echo "config()->myConfigVar: " . config()->myConfigVar;
    }
}

and the use it:

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

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

http://www.evanbot.com/article/universally-accessible-data-php/24

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM