本章要讲的是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知识点讲解:
、global 关键字即是申明全局变量的关键字。
、虽然在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?
本章总结:
任何知识都来源于生活,技术也不例外,不断疯狂学习技术的最终目的是:改善家人的生活质量、提升自己的生活品质,这才叫“技术改变世界"——微观角度。