【问题标题】:How can I re-assign a value to an object variable from the object itself in PHP?如何在 PHP 中从对象本身重新为对象变量赋值?
【发布时间】:2012-02-02 06:16:47
【问题描述】:

我正在创建一个带有字符串验证方法的类。我不能像这样为对象引用重新赋值:

class clearText
{
    private $text;

    function __construct($input)
    {
        $this->text = $input;
    }

    public function clearUp()
    {
        // …
        // functions to sanitize the string in $this->text
        // …
        $this = $this->text;
    }
}

$content = new clearText($_POST['content']);
$content->clearUp();

如上例输出:

致命错误:无法在 \clearText.php 中的 13

行重新分配 $this

当我调用clearUp() 时,我不再需要该对象,所以我想避免像这里那样指定这个赋值,每次调用该方法时:

$content = new clearText($_POST['content']);
$content->clearUp();
$content = $content->text;

有没有什么方法可以做到这一点在方法中


一个可能的答案

有人建议返回该值,以便我可以在执行该方法的同一语句中将其重新分配给对象变量。答案已被删除,但它可以满足我的需要。

方法定义:

public function clearUp()
{
    // …
    // functions to sanitize the string in $this->text
    // …
    return $this->text;
}

实例化时:

$content = new clearText($_POST['content']);
$content = $content->clearUp();

【问题讨论】:

  • object 可以将自己转换为原始数据类型是没有意义的。但是,您可以覆盖该类的 __toString 方法。
  • 我必须承认我不知道你为什么试图修改$this 对象引用。如果您不需要该对象,请使用带有静态方法的静态类。
  • 当然,我对对象做的不仅仅是调用一种方法。不过,我可能高估了在一个项目中只保留函数式或面向对象的代码的想法。

标签: php oop this variable-assignment


【解决方案1】:

没有。 $this 是您正在处理的类的实际实例。您不能将其设置为任何其他值。如果你愿意,它是一个“魔法”关键字。

就像您不能将单词 private 设置为其他含义一样。

但是,您可以通过删除 $content 来销毁您的实例。

【讨论】:

    【解决方案2】:

    不要调用clearUp() 方法,而是调用unset()。之前将字符串分配给另一个变量。但是,这也将确保释放 clearText 对象使用的所有内存:

    $content = new clearText($_POST['content']);
    $content = $content->text;
    

    【讨论】:

    • clearUp() 有几个函数(用于过滤$text 中的字符串),我在评论中指出。 (我会在问题中更清楚地说明。)我只想包含持有变量的重新分配。
    猜你喜欢
    • 2017-07-05
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多