PHP中的变量 - 它们的目的是什么?

时间:2014-08-31 14:43:39

标签: php variables syntax

在PHP中,有一个官方称为“Variable Variables”的功能,可以分配变量变量。变量变量将一个变量的值作为新变量的名称!例如:

$name='Joe';
$$name='Smith'; // could also be written as ${$name}='Smith'

第一个变量$ name包含值'Joe',而第二个变量名为$ Joe,变量值为'Smith'。考虑到PHP变量区分大小写!

我从未使用过此功能,也没有看到相关的目的。有人可以向我解释一下这个功能可以作为一种好的做法被利用吗?

4 个答案:

答案 0 :(得分:10)

有时我们需要非常灵活且可以参数化的软件。当然,你必须准备整件事,但其中一部分来自用户输入,我们没有时间仅仅因为用户需要新的输入而改变软件。

使用变量和变量函数,您可以解决在没有它们的情况下难以解决的问题。

快速示例:

没有变量:

$comment = new stdClass(); // Create an object

$comment->name = sanitize_value($array['name']);
$comment->email = sanitize_values($array['email']);
$comment->url = sanitize_values($array['url']);
$comment->comment_text = sanitize_values($array['comment_text']);

使用变量

$comment = new stdClass(); // Create a new object


foreach( $array as $key=>$val )
{
    $comment->$key = sanitize_values($val);
}

答案 1 :(得分:1)

您可以使用类似

的内容
$labels = array( 'first_name" => 'First Name", 'middle_name" => 'Middle Name", 'last_name" => 'Last Name", 'phone" => 'Phone");
        foreach($labels as $field => $label)
        {
        echo '<div id='field'><label for='$field'>$label</label>
        <input id='$field' name='$field' type='text' value='".$$field."' /></div>";       
        }

在我看来是糟糕的老学校......

答案 2 :(得分:0)

在引用类中的变量时有一些用途,在某些情况下实际上可能需要这些变量(例如__get()__set()__isset()和{{1 }})。但是,在大多数情况下,在全局变量上使用它们是不明智的。

请注意,在变量变量方面,绝不应直接接受最终用户输入。相反,应该使用包装函数来确保只允许特定输入。

大多数情况下,不需要变量变量,建议您尽可能避免变量。

答案 3 :(得分:0)

根据@Faiz的答案(我接受了我的问题的正式答案),我创建了以下示例示例。

如果我有班级客户:

class Customer
{
  public $firstname;
  public $lastname;
  public $country;
  public $gender;
  ...
}

和带有INPUT / SELECT字段的网页HTML表单,其中包含姓名&#39;名字&#39;,&#39;姓氏&#39;,&#39;国家/地区&#39;性别&#39; ...

<form action="..." method="post">
  <input type="text" name="firstname" value="" />
  <input type="text" name="lastname" value="" />
  <select name="country">
    <option value="AL">Albania</option>
    <option value="BE">Belgium</option>
    <option value="HR">Croatia</option>
    ...
  </select>
  <input type="radio" name="gender" value="M" />Man
  <input type="radio" name="gender" value="F" />Woman
  ...
  <input type="submit" value="Submit" />
</form>

通常在我的动作脚本中,我会将这些表单字段逐个映射到类变量中:

$Customer=new Customer();
$Customer->firstname=$_POST['firstname'];
$Customer->lastname=$_POST['lastname'];
$Customer->country=$_POST['country'];
$Customer->gender=$_POST['gender'];
...
$Customer->create();

但是使用变量变量我可以使用以下一行foreach循环轻松地将所有关联数组值(可能有很多容易出错的)映射到类变量中;

$Customer=new Customer();
foreach($_POST as $key=>$value) $Customer->$key=$value;
$Customer->create();

注意:为了回答(逻辑)简单和清晰,我省略了$ _POST值清理。