php全局变量和类配合使用全解析
来源:互联网 发布:linux c和windows c 编辑:程序博客网 时间:2024/05/16 14:18
情况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会被当成局部变量也引用不到的。。。
- php全局变量和类配合使用全解析
- php全局变量和类配合使用全解析
- php全局变量和类配合使用全解析
- php.echo 和window.alert()配合使用
- php全局变量$_SERVER解析
- php全局变量$_SERVER解析
- php全局变量$_SERVER解析
- PHP 常量、PHP 变量全解析(超全局变量、变量的8种数据类型等)
- 解析在PHP中使用全局变量的几种方法
- 解析在PHP中使用全局变量的几种方法
- SQL语句解析(ST12和DB02的配合使用)
- PHP中使用全局变量
- php global 全局变量使用
- 关于php扩展中使用ini配置和使用全局变量
- Android和PHP配合:Base64
- PHP中全局变量和超全局变量
- PHP中全局变量的使用global和$GLOBALS[]
- php 使用serialize() 和 unserialize() 让对象成超级全局变量
- 用AddChildViewController自制抽屉
- cocos2d-x中的动作分析
- 异或
- PHP 中的use关键字
- 大公司还是创业型公司???
- php全局变量和类配合使用全解析
- MYSQL的常用命令和增删改查语句和数据类型
- Android开源项目
- PHP MySQL 函数
- mysql replace
- 我的博客心得
- 关于毕业的一些事情
- MySQL数据库主从同步安装与配置总结
- poj 1308(并查集)