加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – Globals的替代品

发布时间:2020-12-13 17:47:47 所属栏目:PHP教程 来源:网络整理
导读:我有一组需要在我的网站上访问的变量.虽然我可以在我的header.php文件中声明它们,但我更愿意在functions.php中定义它们,或者不在模板文件(视图)中定义它们.我读到的一切都说不要使用GLOBAL的……好吧.但那么定义这些变量的最佳方法是什么? 这是我想要定义的
我有一组需要在我的网站上访问的变量.虽然我可以在我的header.php文件中声明它们,但我更愿意在functions.php中定义它们,或者不在模板文件(视图)中定义它们.我读到的一切都说不要使用GLOBAL的……好吧.但那么定义这些变量的最佳方法是什么?

这是我想要定义的内容:

global $favorites_array;
 global $user;
 global $user_id;
 global $user_name;
 global $uri;

 $user = wp_get_current_user();
 $user_name = $user->user_login;
 $user_id = $user->ID;
 $user_id = get_current_user_id();
 $uri = $_SERVER['REQUEST_URI'];

解决方法

您发现使用全局变量(或尽可能避免使用它们)的常见建议通常是很好的建议,而您首先要寻找替代方案而不是使用它们是正确的.最常见的替代方法是将值作为参数传递给函数.

WordPress的许多功能已经依赖于全局变量,而looking into the source code看起来函数wp_get_current_user()实际上是设置一个名为$current_user的全局变量.

多次调用wp_get_current_user()will immediately return if the global $current_user is already populated:

if ( isset( $current_user ) && ( $current_user instanceof WP_User ) && ( $id == $current_user->ID ) )
    return $current_user;

因此,查看您要设置的变量列表,我发现任何容器变量都没有迫切需要.我的建议是尽可能选择代码中的显式可读性.由于WordPress提供了函数wp_get_current_user(),其目的是获取该用户,而不是创建一个全局$user并传递它,调用可用函数.例如,你不能在字符串插值中使用函数调用:

// Can't do this:
echo "The user is {wp_get_current_user()->user_login}";

…等等在您打算为用户登录创建全局变量的情况下,在函数中设置本地变量.

function your_func() {
  $login = wp_get_current_user()->user_login;
  echo "The user is $login";
}

至于设置像$user_id这样的变量作为用户对象的ID属性的容器,因为ID确实是用户对象的属性,所以在代码中维护这种关系是合乎逻辑的.虽然键入的速度可能更快:

echo $user_id;

这明确了变量的来源:

echo wp_get_current_user()->ID;
// or even better,using the API function
echo wp_get_current_user_id();

最后,关于$_SERVER数组,它已经是a PHP superglobal array,可在所有范围内使用,无需任何额外的工作.因此,不是以下列形式从中抽象出一个键:

$uri = $_SERVER['REQUEST_URI'];

我会选择直接在你自己的函数中使用$_SERVER [‘REQUEST_URI’].例如,如果您发现需要在一个函数中多次使用它,那么可以随意在函数中创建一个局部变量:

function uses_uri() {
  $uri = $_SERVER['REQUEST_URI'];
  echo "I like to say $uri over and over $uri $uri $uri";
}

但同样,如果您使用的是超全局值,则如果直接使用代码或者在使用它的位置附近定义局部变量,则代码将更具可读性(与在单独的包含文件中定义的全局变量相反)必须追溯到被理解).

因为我对WordPress的API并不十分熟悉,所以我不能肯定它是否提供了一个API函数来检索请求URI.但是,如果这样的函数已经存在并且通常在WP代码中使用,我不会感到惊讶.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读