对PHP全局变量和类的深入理解
Father.php的定义如下:
复制代码代码如下所示:
< PHP
美元= 1000;
>
children.php定义如下:
< PHP
需要(父);
美元= 123;
回波插孔。;
>
PHP children.php
运行输出是123。
如果$ = 123被注释,则运行到1000,如果需要$ = 123({父 php }),运行结果为1000。之前。
更好的理解:PHP解释和执行,解释何处,何处去。如美元,这是一个全球性的变量,如第一次使用的第一个案件,当它是1000,在要求
当你运行它时,结果被改变为123,所以输出是123。
案例2:
的children.php代码改为如下:
复制代码代码如下所示:
< PHP
需要(父);
功能testjack(){
如果(!isset(){ $杰克)
$是空的。;
}
} / / testjack
TestJack();
>
PHP children.php
结果是:$杰克是无效的。,,,$杰克引用testjack()是一个局部变量。
如果使用全局关键字,则声明此$插孔是全局变量,并且将代码更改为:
复制代码代码如下所示:
< PHP
需要(父);
功能testjack(){
全球美元;
如果(!isset(){ $杰克)
$是空的。;
其他{ }
$不是NULL。;
}
} / / testjack
TestJack();
>
结果是$不是空的!
案例3:
的children.php代码如下:
复制代码代码如下所示:
< PHP
需要(父);
类jacktest {
公共功能testjack(){
如果(!isset(){ $杰克)
$是空的。;
其他{ }
$不是NULL。;
}
} / / testjack
}
jacktest美元=新JackTest();
jacktest美元-> testjack();
>
运行结果输出:
这是因为类中这个函数的插孔,这是一个局部变量。
如果全球$杰克在功能testjack开始增加,那么美元是无效的输出插孔。
这更容易理解。
案例4:
文件名作为参数动态加载,代码如下所示:
复制代码代码如下所示:
< PHP
美元美元'argv_server病历= { } { 1 };
echo病历。;
要求($病历);
回波插孔。;
>
children.php father.php运行PHP
结果如下:
father.php
一千
也就是说,我们的动态加载器正在成功运行。
案例5:
将动态加载与类定义结合起来:
像这样的目录关系:
| - c.php
| - bfold - b.php
| - afold - a.class.php(里面引用的函数.. / / bfold b.php)
也就是说在c.php类新类,功能和a.class.php需要在bfold文件夹下的b.php,要求(。 / / bfold b.php)报错,警告......
因为你让服务器目前执行c.php文件,所以当PHP解析,路径是相对c.php。你试图改变(。 / / bfold b.php)到(bfold / b.php)看,它不应该是错的。
以下是一个程序,显示require_once使用的一个例子(A.php)内的功能。
了解require_once:
假设require_once(A.php)引用B.php;这句话。
事实上,它相当于调用A.php匿名lambda函数来执行。如下:
c.php需要b.php----- -在一个函数调用
在普通的陈述b.php需要a.php-------—
A.php
现在我们称之为PHP b.php;因为b.php使用要求在普通语句调用A.php,然后A.php会使其相对全局变量的变量和登记为b.php环境。因为B.php是调用文件的根,其运行环境是一个全球性的环境。所以在A.php文件的变量可用于通常在B.php。
现在我们调用PHP c.php;C是使用需要调用b.php功能,那么B是一个过程,在这个电话的感觉,相对B和一根运行环境是调用函数C环境,但是函数调用C如果你想使用B和一个变量,它有没有办法。
如果全局$ A用于引用,那么在这种情况下,因为a不属于全局变量,所以不引用它。
如果引用$,则a $不会被引用为局部变量。