php - 类构造函数创建具有变量名的新类字段?

标签 php oop properties

<分区>

我正在尝试使用 PHP 5.5.13 通过构造函数初始化一个类,但得到了一些奇怪的结果。设置是这样的:

class foo{
     public $bar;
     public $top;
     public $bot = array();

     function __construct($bar, $top){
        $this->$bar = $bar;
        $this->$top = $top;
     }
}

$phonebook = array();
$user_input = $_POST['query'];
if(/* regex match */){
   foreach($valid_input[0] as $arr){
      $name_and_number = explode(" ", $arr);
      $phonebook[] = new foo($name_and_number[0], (int) $name_and_number[1]); //e.g. Bob, 123
      var_dump($phonebook[count($phonebook)-1]);
   }
}

现在奇怪的是,电话簿的 var_dump 返回:

object(foo)#1 (5) { ["bar"]=> NULL ["top"]=> NULL ["bot"]=> array(0) { } 
["Bob"]=> string(3) "Bob" ["123"]=> int(123) }

运行:

echo "$phonebook[0]->$bar";
echo "$phonebook[0]['Bob']"; //Since a Bob field apparently exists?
echo "$phonebook[0]->$Bob";  //Just to test if maybe a $Bob variable has been declared?

全部返回一个空页面。我在这里不知所措。我的构造函数设置很奇怪吗?或者我尝试访问变量的方式?

最佳答案

你需要做的是去掉第二个 $ 符号

class foo{
     public $bar;
     public $top;
     public $bot = array();

     function __construct($bar, $top){
        $this->bar = $bar;
        $this->top = $top;
     }
}

您看到“奇怪”结果的原因是因为 $bar$top 的值是动态计算的,将用于创建一个新的命名的属性。在您的情况下,导致名为“Bob”和“123”的属性

关于php - 类构造函数创建具有变量名的新类字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30562068/

相关文章:

javascript - Pusher 客户端已订阅并从命令行运行

PHP - Linux 上的 Ping exec 挂起脚本

javascript - 如何在javascript中调用实例化类的函数?

java - 安全:http and properties (Spring Security)

javascript - 向对象添加属性

php - 升级 sagepay 表格 2.23 到 3.0

php - 按父/子 ID 重组数组。递归?

c++ - 运算符重载中的作用域运算符

oop - 如何在 Typescript 中将值从一个类的方法传递到另一个类的方法?

c# - 更改基类属性 setter 行为