【问题标题】:PHP Classes and Objects construct and destructPHP 类和对象的构造和销毁
【发布时间】:2016-03-25 14:25:32
【问题描述】:

我正在尝试学习构造和破坏。 所以,我做了这个

<?php 

class Numbers {

    public function __construct($numberint,$numbername,$numberletter,$numberpos) {
        $this->numberint = $numberint;
        $this->numbername = $numbername;
        $this->numberletter = $numberletter;
        $this->numberpos = $numberpos;
    }

    public function __destruct() {
        unset($this->numberpos);
    }
}

$number1 = new Numbers(1,"One","A",0);
print_r($number1);

?>

如您所见,我创建了 Number 类,然后对 Objects 使用构造。但是在构造之后,我想使用 destruct,在这种情况下,未设置 numberpos。我试图将它们放在一起以了解其工作原理。 任何人都可以帮助我吗?

我的想法是改变结果:

Numbers Object ( [numberint] => 1 [numbername] => One [numberletter] => A [numberpos] => 0 ) 

到...

Numbers Object ( [numberint] => 1 [numbername] => One [numberletter] => A ) 

谢谢,记住我正在学习:D

【问题讨论】:

  • 您的网站上似乎有些混淆对象是什么以及它与类的关系。您的代码确实在该类中创建对象。
  • 谢谢!我添加了什么。我希望现在很清楚。再次感谢!
  • 当对象被销毁并且该对象不再可用时调用析构函数。所以你的想法只会行不通
  • @Peter PHP 使用垃圾收集器。当没有包含对它的引用的变量时,对象会自动销毁。无需取消设置对象的属性,因为整个对象都会消失。仅当对象包含对 PHP 之外需要清理的资源的引用时才需要析构函数,例如它需要刷新一个文件缓冲区。

标签: php constructor destructor


【解决方案1】:

析构函数用于销毁整个对象,而不是对象的一部分。如果你想要你想要的输出,你可以这样做:

$number1 = new Numbers(1,"One","A",0);
print_r($number1);

unset($number1->numberpos);
print_r($number1);

Demo.

如果你想看到你的析构函数被调用,取消设置对象:

class Numbers {
    public function __destruct() {
        echo "Destructing!\n";
    }
}

$number1 = new Numbers();
unset($number1);

echo "Done!";

输出:

Destructing!
Done!

【讨论】:

  • 哦,太好了!但是如果我想破坏整个对象......?非常感谢!
  • @Peter - 我的回答的第二部分破坏了整个对象。您在包含您的对象的变量上调用unset(),在本例中为$number1
  • 非常感谢!现在我明白了!我在想只使用 __destruct 它会破坏对象。但现在,我明白我必须使用 unset。谢谢!
猜你喜欢
  • 1970-01-01
  • 2016-02-11
  • 2017-12-07
  • 1970-01-01
  • 2022-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-12
相关资源
最近更新 更多