深入理解php中$GLOBALS与global区别
php中有一个不为很多人所用的超全局变量$GLOBALS。合理使用这个变量能使工作变得更加有效率,本篇文章主要分析一下这个超全局变量的用法以及$GLOBALS和global的区别。
$GLOBALS定义:引用全局作用域中可用的全部变量(一个包含了全部变量的全局组合数组。变量的名字就是数组的键),与所有其他超全局变量不同,$GLOBALS在PHP代码中任何地方总是可用的,自己可以通过打印$GLOBALS这个变量的结果就知道了。
global与$GLOBALS['']区别
$GLOBALS
$GLOBALS — 引用全局作用域中可用的全部变量
说明 ¶
一个包含了全部变量的全局组合数组。变量的名字就是数组的键。
在PHP生命周期中,定义在函数体外部的所谓全局变量,函数内部是不能直接获得的。如果要在函数体内访问外部定义的全局变量,可以通过global声明或者直接使用$GLOBALS来进行访问,例如:
<?php
$var1='www.111cn.net';
$var2='www.google.cn';
test();
function test(){
$var1='taobao';
echo $var1,'<br />';
global $var1;
echo $var1,'<br />';
echo $GLOBALS['var2'];
}
结果将打印为:
taobao
www.111cn.net
www.google.cn
下面主要说明一下global和$GLOBALS的区别:
$GLOBALS['var']是外部的全局变量本身,而global $var是外部$var的同名引用或者指针,也就是说global在函数产生一个指向函数外部变量的别名变量,而不是真正的函数外部变量,而$GLOBALS[]确确实实调用的是外部的变量,函数内外会始终保持一致。
下面通过例子说明一下:
$var1=1;
$var2=2;
function test(){
$GLOBALS['var2']=&$GLOBALS['var1'];
}
test();
echo $var2;
打印结果为1
$var1=1;
$var2=2;
function test(){
global $var1,$var2;
$var2=&$var1;
}
test();
echo $var2;
打印结果为2。为什么会打印结果为2呢?其实就是因为$var1的引用指向了$var2的引用地址。导致实质的值没有改变。我们再来看一个例子吧。
$var1=1;
function test(){
unset($GLOBALS['var1']);
}
test();
echo $var1;
因为$var1被删除了,所以什么东西都没有打印。
$var1=1;
function test(){
global $var1;
unset($var1);
}
test();
echo $var1;
打印结果为1。证明删除的只是别名|引用,起本身的值没有受到任何的改变。也就是说global $var其实就是$var=&$GLOBALS['var']。调用外部变量的一个别名而已。
前几天到贴吧晒度娘收录的时候
我晒了一幅图
有吧友问我:
文章上面的"百度已收录(仅管理员可见)"是怎么实现的
只要在主题的function.php里添加以下代码就可以实现啦~
例子。
代码如下 | 复制代码 |
function d4v($url){ |
方法一
代码如下 | 复制代码 |
图片裁剪缩放函数,支持方位裁剪和自定义坐标裁剪 |
附件是一个有样例图片的测试demo。
不过,这个函数不支持动态gif图片的裁剪缩放。
方法二,
代码如下 | 复制代码 |
<?php if($src_scale>=$dst_scale) |
方法三
根据自定义的目标图, 按目标图高宽比裁剪、缩放源图.
传入参数:
代码如下 | 复制代码 |
$source_path string 源图路径 $target_width integer 目标图宽度 $target_height integer 目标图高度 支持图片类型: image/gif, image/jpeg, image/png. function imagecropper($source_path, $target_width, $target_height) // 源图过高 switch ($source_mime) case 'image/jpeg': case 'image/png': default: $target_image = imagecreatetruecolor($target_width, $target_height); // 裁剪 header('Content-Type: image/jpeg'); |
刚才在 segmentfault 上看到一段很不错的解释分享一下:
如果使用闭合标签,任何由开发者,用户,或者FTP应用程序插入闭合标签后面的空格都有可能会引起多余的输出、PHP 错误、之后的输出无法显示、空白页。因此,所有的 PHP 文件应该省略这个 PHP 闭合标签,并插入一段注释来标明这是文件的底部并定位这个文件在这个应用的相对路径。这样有利于你确定这个文件已经结束而不是被删节的。
所以,纯 PHP 文件最好不要 ?>,不是最好,是一定。
例子
代码如下 | 复制代码 |
<?php |
总结,php不带结束的?>还可以为避免一些编码问题导致页面出错哦。
下面看一个利用PHP CURL 实现HTTP请求豆瓣OAuth登录接口时的一个例子,希望此例子对各位同学会带来帮助哦PHP CURL 扩展可以帮助我们快速实现HTTP请求。
在使用豆瓣OAuth登录接口时,我们需要发送这样的HTTP REQUEST 请求:
代码如下 | 复制代码 |
GET /v2/user/~me HTTP/1.1 |
在命令行中我们这样执行:
代码如下 | 复制代码 |
curl "https://api.douban.com/v2/user/~me" |
PHP CURL 发送 Authorization HTTP 请求
HTTP CURL 执行 POST 方法:
代码如下 | 复制代码 |
$crl = curl_init(); $headr = array(); $headr[] = 'Authorization: '.$douban_user_name.' '.$accesstoken; curl_setopt($crl, CURLOPT_HTTPHEADER,$headr); curl_setopt($crl, CURLOPT_POST,true); $rest = curl_exec($crl); curl_close($crl); print_r($rest); |
如果需要HTTP CURL实现GET请求,请看下面:
HTTP CURL 执行 GET 方法:
代码如下 | 复制代码 |
$header = array(); $header[] = 'Authorization: '.$data->douban_user_name.' '.$data->access_token; $ch = curl_init(); www.111cn.net curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_URL, 'https://api.douban.com/v2/user/'.$data->douban_user_id); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_BINARYTRANSFER, true); $response = curl_exec($ch); curl_close($ch); print_r($response); |
然后就是处理接收到的结果,一般接口类会返回JSON或者XML,采集类就直接过滤HTML的内容即可。
相关文章
mysql_connect与mysql_pconnect的区别详解
在mysql中我们会看到有两种常用的数据库连接模式,一种是长久连接,另一各是页面访问完之后就断了连接,下面我来分别介绍mysql_connect与mysql_pconnect的区别,有需要了解...2016-11-25- VPN可以虚拟出一个专用网络,让远处的计算机和你相当于处在同一个局域网中,而中间的数据也可以实现加密传输,用处很大,特别是在一些大公司,分公司处在不同的区域。...2016-01-27
解决执行maven命令时提示Process terminated的问题
这篇文章主要介绍了解决执行maven命令时提示Process terminated的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-09-25- 我们在作图的时候需要用到“素描”滤镜,但是点开滤镜选项就是找不到。该怎么快速找到“素描”滤镜呢?请往下看。 1、点开滤镜选项时,发现没有素描这一项。2、别急,我...2017-01-22
php 中file_get_contents超时问题的解决方法
file_get_contents超时我知道最多的原因就是你机器访问远程机器过慢,导致php脚本超时了,但也有其它很多原因,下面我来总结file_get_contents超时问题的解决方法总结。...2016-11-25- 一般来说为了达到隐藏自身 IP,我们都会选择一些 CDN 服务,目前用的最多的免费 CDN 是 Cloudflare。但是正常情况下 Cloudflare 是不能自己选择IP,有时候分配给我们的 IP 可能表现不佳,也只能将就着用。但是我们都希望可以用上 CF 比较快的 IP。那么自选IP,就显得很必要了。...2022-09-23
- 这篇文章主要介绍了Mybatis Plus select 实现只查询部分字段的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-01
- 这篇文章主要介绍了MySQL性能监控软件Nagios的安装及配置教程,这里以CentOS操作系统为环境进行演示,需要的朋友可以参考下...2015-12-14
- 本篇文章主要分享了通过window.navigator来判断浏览器及其版本信息的实例代码。具有一定的参考价值,下面跟着小编一起来看下吧...2017-01-23
php file_get_contents 设置代理抓取页面示例
file_get_contents函数在php中可以直接打开本地文件也可以直接抓取远程服务器文件,如果简单的采集我们可以使用file_get_contents直接来操作,如果有防采集我们可能需要...2016-11-25- 这篇文章主要介绍了解决Mybatis 大数据量的批量insert问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-09
iOS APP h5快捷程序 .mobileconfig的生成
1.从APP Store 下载Apple Configurator 2从一个管理点管理所有iOS设备应用程序,文档和配置文件。想要确保您的所有家庭成员在其每台iOS设备上都有类似的应用和文档,管理日益增...2021-12-23- 这篇文章主要介绍了mybatis-plus 表名添加前缀的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-08-26
- 这篇文章主要介绍了Redis连接池配置及初始化实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-29
- 这篇文章主要介绍了详解如何清理redis集群的所有数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-18
- 这篇文章主要介绍了mybatis-plus 返回部分字段的解决方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-02
- 这篇文章主要介绍了源码分析系列之json_encode()如何转化一个对象,对json_encode()感兴趣的同学,可以参考下...2021-04-22
- 这篇文章主要介绍了js如何实现浏览器打印功能,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-15
- 下面小编就为大家带来一篇利用JS实现点击按钮后图片自动切换的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-10-25
- 这篇文章主要介绍了mybatis的Configuration详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-04