php - 有什么办法可以推迟 PHP 代码吗?

标签 php deferred

有什么方法可以延迟 PHP 代码吗?

就像在 javascript 中我们使用 <script defer="defer"></script> .有什么方法可以用 PHP 代码做同样的事情吗?

更新: 这是我使用的代码:

信息:此代码位于我的侧边栏中,导致网站在加载时停止 2-3 秒。我试图跳过这个过程并在网站的其余部分加载后加载此代码....我也对其他编码解决方案持开放态度。

<div style="padding:5px;">
<?php
function currency($from_Currency,$to_Currency,$amount) {
$amount = urlencode($amount);
$from_Currency = urlencode($from_Currency);
$to_Currency = urlencode($to_Currency);
$url = "http://www.google.com/ig/calculator?hl=en&q=$amount$from_Currency=?$to_Currency";
$ch = curl_init();
$timeout = 0;
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_USERAGENT , "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)");
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$rawdata = curl_exec($ch);
curl_close($ch);
$data = explode('"', $rawdata);
$data = explode('"', $data['3']);
$var = $data['0'];
return round($var,1);
}
?>


<div style="padding:2px; border-bottom:1px solid #EFEFEF;">1 USD er <?php echo currency("USD","NOK",1); ?> NOK<br />
</div>

<div style="padding:2px; border-bottom:1px solid #EFEFEF;">1 EUR er <?php echo currency("EUR","NOK",1); ?> NOK<br />
</div>

<div style="padding:2px; border-bottom:1px solid #EFEFEF;">1 GBP er <?php echo currency("GBP","NOK",1); ?> NOK<br />
</div>

<div style="padding:2px; border-bottom:1px solid #EFEFEF;">1 SEK er <?php echo currency("SEK","NOK",1); ?> NOK<br />
</div>

<div style="padding:2px; border-bottom:1px solid #EFEFEF;">1 DKK er <?php echo currency("DKK","NOK",1); ?> NOK<br />
</div>

</div>

最佳答案

唯一可维护的延迟 PHP 代码(无需 hack)的方法是通过 __destruct 方法:

class App {

    protected $deferredStack = [];

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

    public function defer(callable $deferred){
        $this->deferredStack[] = $deferred;
    }

    protected function runDeferredStack()
    {
        array_map('call_user_func', array_reverse($this->deferredStack))
    }
}

用法:

$app->defer(function(){ echo "bye"; })
// code that opens a resource here...
$app->defer(function(){ echo "closing resource"; })
// code that opens DB connection here...
$app->defer(function(){ echo "closing DB connection"; })
$app->defer(function(){ echo "hi"; })

由于延迟堆栈以相反的顺序执行 stdout 将是:

hi
closing DB connection
closing resource
bye

你也可以使用 register_shutdown_function

关于php - 有什么办法可以推迟 PHP 代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12245955/

相关文章:

javascript - 如何让异步ajax请求真正异步?

php - 无法在 WP 上的帖子标题前添加元素符号

php - GLOBALS 和 GLOBAL 有什么区别?

ios - Unity - 如何在 iOS 上隐藏主页栏(延迟系统手势并隐藏主页按钮)

javascript - 以正确的顺序执行 Promise 的 For 循环

python - twisted.protocols.ftp.FTPClient 和 Deferreds

php - 使用预定义模式匹配号码

javascript - 使用 jQuery 延迟 - when() 和 getJSON() 回调

javascript - 缓存服务器响应(AngularJS,延迟)

php - Zend Framework 不活动后自动注销