此代码初始化 curl 2 次并关闭它,我的目标是运行 curl 一次,然后发出多个 curl_exec 请求。
//config.php
$c = [
0 => class1::class,
1 => class2::class
];
//класс курла
class Curl
{
protected $ch;
function __construct()
{
$this->init();
}
function request($method, $url, $options = [])
{
return 'parsed';
}
function init()
{
$this->ch = curl_init();
var_dump('init');
}
function __destruct()
{
curl_close($this->ch);
}
}
//класс ответа сервера
class Response
{
function get()
{
global $c;
$arr = [];
foreach ($c as $item) {
$super = new $item();
/**
* @var Superclass $super
*/
$arr[] = $super->request();
}
return $arr;
}
}
//класс родительский
class Superclass
{
//общий функционал
function request()
{
$c = new Curl();
return $c->request('GET', 'http://ya.ru');
}
}
//дочерние
class class1 extends Superclass
{
//реализация метода request отличается от class2
}
class class2 extends Superclass
{
//реализация метода request отличается от class1
}
//контроллер
$r = new Response();
var_dump($r->get());
首先想到的是把它$c = new Curl()
移到最顶部,例如,在 Response 中,foreach 循环所在的位置,那么您必须将 $c 作为参数传递给 class1 / class2 构造函数。
可以吃更优化的变种吗?通过静态?
想通了,做了这个:
将显示
确实,调试器中弹出了一些错误,并且 $instance 递归地引用了自身(据我了解,这应该是引用自身的结果)。
由于 PHP 本质上是单线程的(我们不考虑外来线程),它的单例非常简单:
这种设计模式非常适合数据库连接和其他资源,其中所有代码的连接和定位必须相同。
还有更幼稚的实现吗?如果您不需要包装自定义方法