什么是可变的变量的实际使用?什么是可变的变量的实际使用?(What's an actual

2019-05-12 02:59发布

可变变量看起来很酷,但我不认为这样一个场景,一个实际上在生产环境中使用它们。 什么会这样的情况呢? 它们是如何使用的?

Answer 1:

它的目的,我想,是允许新手程序员动态地改变数据,而无需使用“复杂的东西”等复合类型(数组和对象)。

我从来没有使用它们。



Answer 2:

变量中变量本质上是一个阵列(图/字典)。 以下是等价的想法:

<?php
$foo = array('a' => 1);
$bar = 'a';
echo $foo[$bar]."\n";

$foo_a = 1;
$bar = 'a';
$vv = "foo_$bar";
echo $$vv."\n";
?>

因此,如果你换你的“变量变量”到父数组,你可以做掉他们。

我见过人们使用内部类变量属性:

<?php
class Foo
{
  private $a = 1;

  public function __get($key)
  {
    if (isset($this->$key)) return $this->$key;
  }
}

$foo = new Foo();
echo $foo->a;
?>

但同样,你可以使用一个数组:

<?php
class Foo
{
  private $props = array('a' => 1);

  public function __get($key)
  {
    if (array_key_exists($key, $this->props))
      return $this->props[$key];
  }
}

$foo = new Foo();
echo $foo->a;
?>

内外类:

<?php
class Foo
{
  public $a = 1;
}

$foo = new Foo();
$prop = 'a';
echo $foo->{$prop};
?>

所以,你从来没有“必须”来编写自己的代码来控制时使用的变量变量或变量属性。 我个人的偏好是从来没有使用可变的变量。 我偶尔使用不同属性,但更喜欢使用数组时,我会以这种方式来访问数据。



Answer 3:

就个人而言,我使用它们相当频繁。 以下类型的所有呼叫使用可变的变量:

$foo->$bar = 'test';
$foo->$bar();
$bar();

所以,你做一个动态方法/函数调用任何时候,您正在使用可变的变量...

一个常见的用途是通过访问受保护的属性__get魔术方法。 我见过下面往往:

public function __get($name) {
    return isset($this->$name) ? $this->$name : null;
}

其定义是使用可变变量提供只读访问受保护的成员...

我从来没有直接使用$$var语法(不要以为我是永远)。 我已经看到了用来访问名字全局变量global $$name; echo $$name; global $$name; echo $$name; 但同样的事情可以用做$_GLOBALS[$name]语法,所以这不是一个很好的用例(更不用说使用全局变量通常被看作是不好的做法)...



Answer 4:

你可以把它在一个模板系统使用,你使用的是PHP文件,并需要在变量设置:

function fetch_template($file, $vars){
    $ret = 'File not loaded.';
    if(file_exists(TEMPLATE_PATH.$file)){
        //could do this with extract() but I am showing you
        foreach($vars as $varName => $value){
            ${$varName} = $value;
        }
        ob_start();
        include(TEMPLATE_PATH.$file);
        $ret = ob_get_contents();
        ob_end_clean();
    }
    return $ret;
}

现在,假设你在你的模板中使用这些变量名,你可以把它和变量传递到使用它。

echo fetch_template('hi_there.tpl', array('name'=>'JJ'));

然后在你的模板:

Hello <?php echo $name; ?>!


Answer 5:

我发现它在一个单一的情况下非常有用。 我有一个JSON格式的YouTube API的结果,这样的

 $obj->media$title => Video title

所以,我用它像

$mt = 'media$title';
$obj->$mt ;

所以,它的工作对我来说在这里:)



Answer 6:

我主要用它来减少在一个php文件的开头消毒GET / POST数据复制粘贴:它使消毒变量与专有名词:

$fields=array('age','name','gender','email','username');

foreach($fields as $field) {
    if (empty($_REQUEST[$field] === false)
        ${$field} = sanitize($_REQUEST[$field]);
    else
        ${$field} = '';
}

而不是所有这些行:

if (empty($_GET['age']) === false) 
    $age= sanitize($_GET['age']);
else
    $age= '';

if (empty($_GET['name']) === false) 
    $name= sanitize($_GET['name']);
else
    $name = '';

if (empty($_GET['gender']) === false) 
    $gender= sanitize($_GET['gender']);
else
    $gender= '';

if (empty($_GET['email']) === false) 
    $email= sanitize($_GET['email']);
else
    $email= '';

if (empty($_GET['username']) === false) 
    $username= sanitize($_GET['username']);
else
    $username= '';

我希望它能帮助



文章来源: What's an actual use of variable variables?