本章要讲的是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. 数论专项测试——约数个数和(lucas的数论)

    #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...

  2. Hash_bzoj1862: [Zjoi2006]GameZ游戏排名系统

    #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...

  3. Bzoj1823 [JSOI2010]满汉全席

    Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1640  Solved: 798 Description 满汉全席是中国最丰盛的宴客菜肴,有许多种不同的 ...

  4. [iOS 图像处理相关]

    //使用CGImage获取并修改图片像素 #define Mask8(x) ( (x) & 0xFF ) #define R(x) ( Mask8(x) ) #define G(x) ( Ma ...

  5. Beta版本冲刺第三天 12.9

    一.站立式会议照片: 二.项目燃尽图: Android端 后台 三.项目进展: 成 员 上次完成任务 今天完成任务 明天要做任务 问题困难 心得体会 胡泽善 完成用户简历的填写和查看 日期合理性的判断 ...

  6. 高性能JavaScript笔记三(编程实践)

    避免双重求值 有四个标准函数可以允许你传入代码的字符串,然后它才你动态执行.它们分别是:eval.Function.setTimeout.setInterval 事实上当你在javascript代码中 ...

  7. Ubuntu学习总结-02 Ubuntu下的FTP服务的安装和设置

    一 安装vsftpd 在安装前vsftpd,先更新apt-get下载的数据源输入如下命令: sudo apt-get update 然后安装vsftpd sudo apt-get install vs ...

  8. POJ3254Corn Fields(状态压缩DP入门)

    题目链接 题意:一个矩阵里有很多格子,每个格子有两种状态,可以放牧和不可以放牧,可以放牧用1表示,否则用0表示,在这块牧场放牛,要求两个相邻的方格不能同时放牛,即牛与牛不能相邻.问有多少种放牛方案(一 ...

  9. vmware的安装

    VMware Workstation是一款功能强大的虚拟机软件,在不影响本机操作系统的情况下,用户可以在虚拟机中同时运行不同版本的操作系统,用于开发.测试以及部署工作,这边小编为大家分享最新版本VMw ...

  10. ASP.NET程序单客户端(浏览器)登录的实现方案

    需求描述:当用户的账户在另一个浏览器中登录的时候,需要把当前浏览器的登录强制下线.这种需求在业务系统,或付费视频服务网站中比较常见. 这种需求我称之为"单客户端(浏览器)"登录,与 ...