php全局变量和类配合使用深刻理解
2015-01-24信息快讯网
本文详细介绍下php全局变量和类在多种情况下的配合使用,感兴趣的朋友可以参考下哈,希望对大家有所帮助
情况1:father.php如下定义:
<?php $jack = 1000; ?> children.php 如下定义: <?php require("father.php"); $jack=123; echo $jack."/n"; ?>
php children.php
运行输出为123.
如果将$jack=123注释掉,运行为1000,如果将$jack=123放到require("father.php");之前,运行结果为1000.
比较好理解:php解释执行,解释到哪,执行到哪。。像$jack这种属于全局变量,如第一种情况的初始用它的时候是1000,是在require
的时候运行得到的,结果又被改成了123,所以运行结果输出123.
情况2:
children.php代码改为如下:
<?php require("father.php"); function testJack(){ if(!isset($jack)){ echo '$jack is null'."/n"; } }//testJack testJack(); ?>
php children.php
运行结果为:$jack is null.也就是说在testJack()中引用的$jack是一个局部变量。
如果使用global关键字,声明这个$jack是一个全局变量,代码改为如下:
<?php require("father.php"); function testJack(){ global $jack; if(!isset($jack)){ echo '$jack is null'."/n"; }else{ echo '$jack is not null'."/n"; } }//testJack testJack(); ?>
则运行结果为$jack is not null!
情况3:
children.php代码如下:
<?php require("father.php"); class JackTest{ public function testJack(){ if(!isset($jack)){ echo '$jack is null'."/n"; }else{ echo '$jack is not null'."/n"; } }//testJack } $jackTest = new JackTest(); $jackTest->testJack(); ?>
运行结果输出:$jack is null
这是因为class中的这个函数的$jack这是一个局部变量啊。
如果在function testJack开头加 global $jack;那么就输出$jack is not null了。
比较容易理解。
情况4:
把文件名当做参数动态加载,代码如下:
<?php $casefile = $_SERVER['argv'][1]; echo $casefile."/n"; require($casefile); echo $jack."/n"; ?>
运行php children.php father.php
结果如下:
father.php
1000
也就是说我们动态加载程序运行成功了。。
情况5:
要把动态加载和类的定义结合起来:
目录关系式这样的:
|- c.php
|- Bfold - b.php
|- Afold - a.class.php (里面的函数引用了../Bfold/b.php )
也就是说 在c.php 中new 了class a.class ,而a.class.php 的一个函数中require 了Bfold 文件夹下的b.php ,这个require(../Bfold/b.php )报错,Warning: ……
因为你让服务器当前执行的是c.php 文件,所以php 解析的时候是把路径相对于c.php 而言的,你试试把(../Bfold/b.php )改成(Bfold/b.php )看看,应该就不会报错了。
下面是程序例子,说明在函数内部使用require_once (A.php ).
对require_once 的理解:
假设B.php 中引用了require_once(A.php); 这条语句。。
那么其实是相当于调用了A.php 这个匿名的lambda 函数去执行。如下图:
C.php 在一个函数调用中 require 了 B.php------》
B.php 在普通语句中 require 了 A.php--------》
A.php
现在我们调用 php B.php ;因为 B.php 在普通语句中使用了 require 调用了 A.php ,那么 A.php 会把它的相对 A 来说是全局变量的变量,注册到 B.php 的环境中。因为 B.php 是根开始调用文件,他的运行环境就是全局环境。所以A.php 文件中的变量在 B.php 可以被正常使用。
现在我们调用 php C.php ;那么 C 是在函数使用 require 调用了 B.php 的,然后 B 又调用了 A ,感觉在这个调用的过程中,相对 B 和 A 根运行环境是 C 的调用函数的环境 ,但 C 的调用函数如果要使用 B 和 A 中的变量,就没有办法了。
如果用 global $a, 去引用,那么由于 $a 在这种情况下不属于全局变量,引用不到。
如果用 $a 去引用,那么由于 $a 会被当成局部变量也引用不到的。
php5.3 不支持 session_register() 此函数已启用的解决方法
session在php5.3中的变化 session_is_registered() is deprecated in
PHP使用正则表达式清除超链接文本
PHP统计二维数组元素个数的方法
多个PHP中文字符串截取函数
CodeIgniter使用phpcms模板引擎
PHP set_error_handler()函数使用详解(示例)
php inc文件使用的风险和注意事项
php使用exec shell命令注入的方法讲解
PHP输出当前进程所有变量/常量/模块/函数/类的示例
php预定义变量使用帮助(带实例)
PHP Session 变量的使用方法详解与实例代码
PHP中判断变量为空的几种方法分享
PHP Global定义全局变量使用说明
实测在class的function中include的文件中非php的global全局环境
解析在PHP中使用全局变量的几种方法
php unset全局变量运用问题的深入解析
php IP转换整形(ip2long)的详解
php数组声明、遍历、数组全局变量使用小结
PHP Global变量定义当前页面的全局变量实现探讨
PHP 常用数组内部函数(Array Functions)介绍
php将gd生成的图片缓存到memcache的小例子
探讨各种PHP字符串函数的总结分析
php set_time_limit()函数的使用详解
深入探讨:PHP使用数据库永久连接方式操作MySQL的是与非
深入分析使用mysql_fetch_object()以对象的形式返回查询结果
php变量作用域的深入解析
php魔术方法与魔术变量、内置方法与内置变量的深入分析
PHP导出EXCEL快速开发指南--PHPEXCEL的使用详解
PHP不用第三变量交换2个变量的值的解决方法
PHP超级全局变量数组小结
PHP中全局变量global和$GLOBALS[]的区别分析