我有一个页面(索引)作为我的应用程序的入口点。该页面将调用函数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;
}
}
答案 0 :(得分:1)
在PHP
中,每个请求(至少在逻辑上)是一个不同的进程,并且您的变量都在该请求中创建和销毁。
如果您需要在同一个请求中多次实例化FirstTest,当然通过使用单例而不是实例化那么多新对象,您将获得更好的性能和更少的内存使用。但据我所知,你只需要实例化一次,所以没有区别。