【问题标题】:on the fly variable creation in php [duplicate]在php中动态创建变量[重复]
【发布时间】:2014-10-06 00:33:16
【问题描述】:

我有以下情况。 我有一个没有变量的类,它在其构造函数中错误地将值设置为“不存在”的变量。结果是变量是动态创建的,只要类实例存在,它就是可行的。

myClass.php

class myClass {
    public function __construct($var)
    {
        $this->var = $var;
    }

    public function printVar() {
        echo $this->var. "</br>";
    }
} 

tester.php

include("myClass.php");

$myClass = new myClass("variable");
$myClass->printVar();

var_dump($myClass);

当我运行tester.php 时,输出如下

variable
object(myClass)#1 (1) { ["var"]=> string(8) "variable" } 

有谁知道为什么会这样?你能指出任何解释这种行为的文档引理吗?

是否有可能避免这样的重载__set() 函数?

【问题讨论】:

  • 哼,不要明白这个。你告诉你的班级 $this->var 等于字符串“variable”,所以当你 var_dump 它告诉你这个班级有一个名为“var”的变量,它等于“variable”......那么问题出在哪里?
  • 你有变量并且你在你的构造函数中设置它...
  • @Athafoud:这是标准的 PHP。您可以随时通过为其分配一些东西来创建变量。该 var 是类属性还是“裸”变量都没有关系。
  • @athafoud 这是有意的。您在将创建内部引用的构造函数中使用它。你看到的完全正常
  • @BCartolo 您提到的问题回答了“如何避免它”部分。但不是他们为什么。然而,这是一个很好的见解!

标签: php


【解决方案1】:

这是因为 php 在赋值之前没有强制声明。但是您应该始终在类中声明变量,因为它增加了代码的可读性,并且您可以将变量的可访问性指定为公共或私有。

【讨论】:

    【解决方案2】:

    如果您正在考虑根据您传递的字符串动态创建 var,您可能需要检查 $$vars,是的,如果这次我正确地解决了您的问题,请检查两次 '$'

    【讨论】:

    • 变量变量用于从已经有值的字符串创建变量。我认为 OP 正在寻找一种无需明确设置变量即可创建变量的方法
    • 我知道这一点,但事实并非如此
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-29
    • 2011-04-21
    • 2012-09-02
    • 2016-03-19
    • 1970-01-01
    • 2014-05-19
    • 2022-11-21
    相关资源
    最近更新 更多