当我创建类

时间:2015-06-30 00:45:07

标签: php class oop object php-internals

我有两个这样的课程:

class one
{
    public $var1 = 'anythig';
}

class two
{
    public $var2 = 'anythig';
}

我想知道当我创建这些类的对象实例时会发生什么?我的观点是存储在内存中的值。实际上我有一些大班,而且我的资源有限。那么我想知道,如果我把NULL放到我的课堂上,不再需要的话就好了吗?并帮助优化?

我有一个switch()来包含所需的课程。像这样的东西:

switch{
          case "one":
          require_once('classes/one.php');
          break;

          case "two":
          require_once('classes/two.php');
          break;
      }

每次我只需要一节课。当我定义一个新对象$obj = new class我之前定义为对象实例的类会发生什么?那还留在记忆中?如果我提出NULL有帮助吗?请指导我..

修改

最后一行是否有用?

$obj = new myvlass;
echo $obj->property; // there is where that my class is done
$obj=NULL;

2 个答案:

答案 0 :(得分:0)

What determines when a class object is destroyed in PHP?

PHP手册指出“只要删除对特定对象的所有引用,就会调用析构函数方法”这是真的(尽管可能导致某些undesirable behaviour。)

如果你明确地将对象变量设置为NULL,那么PHP无论如何都会破坏它,这并不重要。

答案 1 :(得分:0)

我会建议我按照以下方式实现课程的最佳方式:

<?php
class scSendMail
{
    protected $from;
    protected $toList;
    protected $replyTo;
    protected $subject;
    protected $message;
    public function __construct()
    {   
        register_shutdown_function(array($this,'__destruct'));
        $this->setFrom("updates@planetonnet.com");
        $this->setReplyTo("noreply@planetonnet.com");
        $this->setSubject("Update from PlanetOnNet.com");
    }

    public function __destruct()
    {
        unset($this->from);
        unset($this->toList);
        unset($this->replyTo);
        unset($this->subject);
        unset($this->message);
    }


    public function sendMail()
    {
     // ..... body
    }


}

?>

以这种方式,只要不需要对象,它就会通过取消设置变量来破坏自身并释放内存。

你可以随时启动另一个对象来替换新对象,但要小心根据当前持有的对象使用方法。

只要你不再需要使用它就可以设置为NULL以释放内存,并使用新变量来使用新对象。