为了账号安全,请及时绑定邮箱和手机立即绑定

通过 CRON 更改 PHP 全局变量

通过 CRON 更改 PHP 全局变量

PHP
喵喵时光机 2021-12-24 10:19:22
关于 PHP、wordpress 和 CRONE 的问题。我无法通过小部件调用的函数中的 CRON 过程更改全局变量。$containerregister_activation_hook(__FILE__, 'activate_my_plugin');function activate_my_plugin() {    wp_clear_scheduled_hook('update_container');    wp_schedule_event( time(), 'hourly', 'update_container');}add_action('update_container', 'update_container');function update_container() {    global $container;    // updating container}function use_container() {    global $container;    // !And here we have undefined $container}class acw_widget extends WP_Widget{    // ...     public function widget( $args, $instance )     {        use_container();    }}我正在尝试在 WP 站点上缓存对 DB 的请求。因此,我决定使用 CRON 来安排请求并将结果存储在某个全局容器中。假设小部件会出于其目的从容器中获取数据,但我遇到了看起来像“未定义容器”的问题。因此,我激活插件,wp-cron.php 显示,该容器已更新(在“update_container”处),但在“use_container”中获取容器显示,$container 未定义且未更新。请你解释一下,为什么会这样?如何跟踪初始化/更新全局容器的正确顺序?代码是真实代码的简化版。也许这很尴尬,但我是 PHP 和 wordpress 的新手,所以这是我找到的解决方案。
查看完整描述

1 回答

?
慕莱坞森

TA贡献1810条经验 获得超4个赞

您不能使用任何变量 (inc global) 作为数据“容器”。因为 PHP 没有状态,所以每个 php 脚本都是“从头开始”运行的。

因此,当您的CRON脚本运行时 - 它global $container仅针对当前运行进行更新。然后,当您运行您的widget功能时 - 它是另一个“运行”,您会发现它$container没有定义。

您需要的不仅仅是使用变量,而是将数据存储在数据库中(CRON例如通过相同的脚本)。然后,每次您需要该数据时 - 只需从数据库中获取即可。

希望能向你澄清一些事情。


查看完整回答
反对 回复 2021-12-24
  • 1 回答
  • 0 关注
  • 196 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号