本章要讲的是PHP的全局变量。

这里讲个小故事:

很多年前,一个很聪明的小偷,想去偷一户人家的钱。可是他偷不到主人的钥匙,怎么办呢?

他想到了一个办法,去之前嚼了一块口香糖,口香糖的牌子是“大大泡泡糖”。

这里我们来讲个泡泡糖的插曲。

不知道大家小时候有没有吃过“大大泡泡糖”。绿箭一开始在中国面世的时候并不被老百姓接受,那时的人还没有嚼口香糖的习惯(如口气清新、时尚啥的完全没有概念),于是箭牌公司("大大"其实就是这个公司的产品)的老外在收购了一家糖果公司后推出了大大泡泡糖。

这里老外发现,那时的中国要想推一种食品,外观和感官体验很重要,口味倒是其次的。譬如绿箭,就是用来咀嚼的,老外发现当时的中国人吃口香糖是为了好玩。于是,大大泡泡糖在中国推广时一炮打响,因为除了水果口味好吃,还很好玩,大家还能一起吃,看看谁的泡泡大,起到了娱乐性效果(比大小一直是国人娱乐的重要途径)。

小偷的方法很特别:把大大泡泡糖嚼后趁其软状塞入锁孔,十分钟冷却后再拉出,于是钥匙的形状搞定了。(为何需要用大大泡泡糖的原因是这种泡泡糖冷却后不粘手)。

正式剧情开始了

1、 小偷用配来的钥匙如愿以偿偷到了这户人家的东西,这户主人竟然是贪官,家里还有金条

2、 本想再偷隔壁一家,在继续用泡泡糖塞入锁孔时发现用刚才那把钥匙依然能开旁边人家的锁。

3、 接连开了该楼层其他几户,发现都能开。后来小偷明白了,这个贪官买了这一个楼层所有住户,用的是同一款门锁

4、 于是小偷的这把钥匙几乎成了“万能钥匙”。

故事先讲到这,我们来看段代码:

<?php
//解释一下,我们把$str 这个变量当做 钥匙,请看以下分解
$str="主人的钥匙";
function steal() //steal 是”偷”的英文
{
if($str!="")
echo "偷到钱了";
else
echo "毛也没偷到";
}
steal();
?>

大家运行一下会发现,输入的结果是:毛也没偷到

这是为什么呢?

上面不是定义了$str是"主人的钥匙"了吗?为啥还是啥都偷不到?

原因如下:

因为主人的钥匙藏在了他身上,作为小偷也要有点节操,要偷必须得自己配一把。

于是上述代码要这么改:

<?php
$str="主人的钥匙"
$str_copey=$str;//小偷用口香糖塞了进去,复制了一把钥匙,和主人的钥匙是一模一样的。于是接下来大干一场吧
function steal() //steal 是”偷”的英文
{
global $str_copey;//使用了口香糖钥匙
if($str_copey!="")
echo "偷到钱了";
else
echo "毛也没偷到";
}
steal();
?>

结果已经很明显了:很顺利的偷到了钱

PHP知识点讲解:

1、global 关键字即是申明全局变量的关键字。

2、虽然在steal的过程中有一个变量也叫str,但是这个str并非外面的str,它只能作用于steal这个函数体内。也就是说小偷如果用自己家门的钥匙是打不开别人家的门的

3、复制过后的钥匙很好用。

如果大家懂了全局变量,那么上面的代码只要这么写即可:

<?php
$str="主人的钥匙"
function steal() //steal 是”偷”的英文
{
global $ str; //全局变量
if($str!="")
echo "偷到钱了";
else
echo "毛也没偷到";
}
steal();
?>

 故事继续:

这个小偷利用大大泡泡糖的方式偷了好多家,时间久了,他越来越出名,连很多开锁公司都请教他到底如何才能仿制人家的钥匙。

小偷很聪明,他从来不把如何用泡泡糖塞入锁芯变成模具最后能复制一把钥匙的方法告诉任何人。于是其他同行小偷只能每次要偷钱时来请这位小偷来配钥匙,这个小偷后来索性不做小偷了,做起来配钥匙正规行当,也开了一个开锁公司。

于是,一个小偷从良的故事被传为了"佳话"。

故事结束(以上故事纯属虚构,如有雷同,不胜荣幸),我们再来看段代码

首先,建立一个文件,叫做makkey.php,代码如下:

<?php
$str="主人的钥匙";
$str_copey=$str; //大大泡泡糖配置钥匙的方式可是很复杂的哦
?>

然后,再建立一个文件,就叫做stealmoney.php

代码如下:

<?php
include("makkey.php");
function steal() //steal 是”偷”的英文
{
global $str_copey; //使用了小偷公司专门研发的口香糖复制钥匙
if($str_copey!="")
echo "偷到钱了";
else
echo "毛也没偷到";
}
steal();
?>
 

输出结果?一定能偷到钱。

这里有两个知识点:

1、写出好的程序要学会把类库和业务逻辑封装成可复用的方法库。

上面的include("makkey.php");就是封装, 假如$str_copey=$str;是一个很复杂的过程,那么我们必须学会如何封装这么一个方法库,让其他程序员可以继续复用你的成果

大家这下应该知道为何要封装了吧。

2、使用include方式,global 依然有效

额外小知识:

如果大家在做wordpress二次开发,想自定义一些页面,除了使用wp自带的函数还能自己做一些底层级别的数据调用。代码如下:

<?php
require(dirname(__FILE__) .'/wp-blog-header.php' );
//上面就是wordpress基本的函数库封装
global $wpdb; //这个是wordpess 数据库操作的基本对象
$result=$wpdb->get_results(“select * fromwp_posts);
var_export($result);
?>

大家动手试一下吧,其实还有很多功能,此处不表。你会发现wordpress之所以这么优秀,是因为其二次开发的便捷性、高效性、灵活性确实很强

学会写程序—>写出好程序——>封装方法库——>方便你我他.

一个好的程序架构就是这么开端的。

补充:

大家可能还会学到$GLOBALS,这个叫超全局变量。请大家自行搜索。不讲这个知识是因为不怎么推荐使用。意义不大,如果要用何必用PHP?

本章总结:

任何知识都来源于生活,技术也不例外,不断疯狂学习技术的最终目的是:改善家人的生活质量、提升自己的生活品质,这才叫“技术改变世界"——微观角度。

------------------------------------

关注我的微信公众号,每天成熟一点点
关注步骤:
  很直接的拿出手机->打开微信->点扫一扫,扫下面二维码即可

[PHP知识点乱炖]四、全局变量——小偷从良记的更多相关文章

  1. js知识点乱炖

    修改属性 元素.style.样式=值     document.getElementById('box').style.width='200px'; 属性操作方式 1.. 的 元素.属性名如果属性是单 ...

  2. HTM CSS 笔记乱炖

    一.常用实体(字符转义) '<' == '<' '©' == '©' '>' == '>' '"' == '"' ' ' == ' ' '®' == '®' ...

  3. [独孤九剑]Oracle知识点梳理(四)SQL语句之DML和DDL

    本系列链接导航: [独孤九剑]Oracle知识点梳理(一)表空间.用户 [独孤九剑]Oracle知识点梳理(二)数据库的连接 [独孤九剑]Oracle知识点梳理(三)导入.导出 [独孤九剑]Oracl ...

  4. Anliven - 乱炖

    001 --- Ping Yourself! 由TCP/IP协议栈而想到的: 你的"协议分层"是如何的?有谁或者什么事务所对应着?谁先谁后,什么重要? 你的"协议栈&qu ...

  5. IO知识点整理(四种基类的使用)

    一:介绍 1.两种基类 字节流 InputStream,OutputStream 字符流 Reader,Writer 二:字符流的基本方法(文字的处理比较常见) 1.Writer的API 2.File ...

  6. Android群英传知识点回顾——第四章:ListView常用优化技巧

    4.1 ListView常用优化技巧 4.1.1 使用ViewHolder模式提高效率 4.1.2 设置项目间分割线 4.1.3 隐藏ListView的滚动条 4.1.4 取消ListView的Ite ...

  7. oc语言学习之基础知识点介绍(四):方法的重写、多态以及self、super的介绍

    一.方法重写 /* 重写:当子类继承了父类的方法时,如果觉得父类的方法不适合,那么可以对这个方法进行重新实现,那么这个就重写. 注意:也就是说,一定只能发生在父类和子类关系中. 然后是子类重新实现父类 ...

  8. c语言学习之基础知识点介绍(四):算术运算符和逗号表达式

    本节主要介绍c语言中运算符. 运算符主要分为四类: 1.算术运算符 加(+),减(-),乘(*),除(/),取余(%,两数相除,得到余数) 2.关系运算符 3.逻辑运算符 4.换位运算符 下面将依次介 ...

  9. CSS3知识点整理(四)----布局样式及其他

    包括CSS3多列布局样式.Flexbox伸缩布局.盒子模型等.重点介绍了Flexbox伸缩布局的各种属性用法. 一.多列布局 为了能在Web页面中方便实现类似报纸.杂志那种多列排版的布局,W3C特意给 ...

随机推荐

  1. DIV横排/竖排滚动(white-space/::-webkit-scrollbar的使用技巧以及display: inline-block的选择)支持手势

    参考微信的京东客户端http://wqs.jd.com/,实现DIV的横排滚动,且支持手势,并且不会出现滚动跳,效果如下: 但是观察其div结构是没有使用任何JS去实现. 一.实现上DIV的横排 观察 ...

  2. Jenkins使用jenkins-cli.jar进行远程调用时出现“ERROR: No such job 'test'”的问题解决(Windows)

    网上最提倡的解决办法是用SSH的key进行登录,但是我发觉Linux上非常容易实现,但是Windows压根不知道在哪里设置. 原文:https://issues.jenkins-ci.org/brow ...

  3. soapUI测试webservice(参数为xml格式的处理方式)

    如果传递的是xml,要用<![CDATA[   ]]>将xml注释为字符串 示例 <?xml version="1.0" encoding="UTF-8 ...

  4. pythong中字符串strip的用法

    strip的用法是去除字符串中前后两端的xx字符,xx是一个字符数组,并不是去掉“”中的字符串, 数组中包含的字符都要在字符串中去除.默认去掉空格,lstrip则是去掉左边的,rstrip是右边的 见 ...

  5. linux中配置NTP基本操作

    计算机的系统时间是由计算机内的石英晶体震荡电路以固定的震荡频率产生的date 查看当前时区vim /etc/sysconfig/clock  修改时区配置文件ZONE="America/Ne ...

  6. 网络存储(二)之ISCSI原理

    组成 一个简单ISCSI系统大致由以下部分构成 ISCSI Initiator 或者 ISCSI HBA ISCSI Target 以太网交换机 一台或者多台服务器 结构图如下: iscsi服务器用来 ...

  7. Visual Studio 当前上下文中不存在名称“ConfigurationManager”

    Visual Studio调试出现错误:当前上下文中不存在名称“ConfigurationManager” 解决方法: 1.System.Configuration引用这个dll参考:http://k ...

  8. GitHub的三个按钮

    star 的作用是收藏,目的是方便以后查找. watch 的作用是关注,目的是等作者更新的时候,可以收到通知 fork 的作用是参与,目的是你可以增加新的内容,然后 Pull Request,把你的修 ...

  9. DNS介绍

    DNS出现及演化 网络出现的早期 是使用IP地址通讯的,那时就几台主机通讯.但是随着接入网络主机的增多,这种数字标识的地址非常不便于记忆,UNIX上就出现了建立一个叫做hosts的文件(Linux和w ...

  10. gnuplot使用1

    安装之后,迫切需要运行一个程序来看看,首先要找到软件默认的使用路径: 输入 show loadpath命令就会显示默认查找的几个路径, loadpath is loadpath from GNUPLO ...