• 技术文章 >后端开发 >php教程

    php全局变量和类配合使用全解析_PHP教程

    2016-07-14 10:11:08原创464
    情况1:

    father.php如下定义:

    $jack = 1000;

    ?>

    children.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代码改为如下:

    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是一个全局变量,代码改为如下:

    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代码如下:

    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:

    把文件名当做参数动态加载,代码如下:

    $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 会被当成局部变量也引用不到的。。。

    www.bkjia.comtruehttp://www.bkjia.com/PHPjc/477354.htmlTechArticle情况1: father.php如下定义: ?php $jack = 1000; ? children.php 如下定义: ?php require(father.php); $jack=123; echo $jack./n; ? php children.php 运行输出为123. 如果...

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:php 全局 变量 配合 使用 解析 情况 father.php 下定义 php jack 1000 c
    上一篇:php删除字符串末尾子字符_PHP教程 下一篇:php实战第十一天_PHP教程
    千万级数据并发解决方案

    相关文章推荐

    • 深入了解PHP反序列化原生类• 带你吃透16个PHP魔术方法• php程序重要是正则协助 很急很• thinkphp中分页保持查询条件不变的有关问题• php 数据能够获取 但没法写入数据库 同一文件另一个表可能写入
    1/1

    PHP中文网