实例化对象

时间:2017-01-15 17:14:02

标签: php


我有一个页面(索引)作为我的应用程序的入口点。该页面将调用函数sayHi()并显示基于值的内容(通常该函数将执行数据库查询并显示信息)。我想知道最好的使用方法 第一种方法:每次用户执行请求(或页面刷新)时,将始终创建一个新对象。那么页面性能(或内存)是否有问题?
第二种方法:让我们说我们有2个用户在同一时间查询索引页面(具有不同的值),会发生什么(竞争条件)?
索引页

<?php

   require_once('firstTest.php');

   $value = $_GET['params'];

   // 1st method
   $first = new FirstTest();
   $first->sayHi($value);

   // 2nd method
   $second = FirstTest::getInstance();
   $second->sayHi($value);

firstTest课程:

class FirstTest extends Singleton
{
  public function sayHi($value)
  {
    echo 'value is : ' .$value;
  }
 }

firstTest(第二种方法)

class FirstTest
{
  public function sayHi($value)
  {
    echo 'value is : ' . $value;
  }
}

单身类

abstract class Singleton
{
  protected static $instance;
  protected final function __construct(){}
  protected final function __clone(){}
  public final function __sleep(){
    throw new Exception('cannot serialize');
  }
  public static function getInstance(){
    if (self::$instance === NULL)
        self::$instance = new self();

    return self::$instance;
  }
}

1 个答案:

答案 0 :(得分:1)

PHP中,每个请求(至少在逻辑上)是一个不同的进程,并且您的变量都在该请求中创建和销毁。

如果您需要在同一个请求中多次实例化FirstTest,当然通过使用单例而不是实例化那么多新对象,您将获得更好的性能和更少的内存使用。但据我所知,你只需要实例化一次,所以没有区别。