当a文件的函数调用b文件的函数时,而b文件的函数包含c文件,b文件的函数里要使用c文件的全局变量时,
会出现无法调用其C文件全局变量,却可以调用C文件的函数, 请问这是为什么?
a.php
<?php require_once("b.php"); global $key,$value; test(); ?>
b.php
<?php $key = "key"; $value = "value"; function test() { require_once("c.php"); global $cccccc; // echo $key.$value; echo $cccccc; echo ctest(); } ?>
c.php
<?php $cccccc = "this is C file content"; function ctest() { // global $cccccc ; $cccccc = "kkk"; echo "C func echo :".$cccccc; } ?>
初步理解: 当网页调用a文件时,会全部加载b文件内容,包括C文件全局变量及函数,而当b文件调用C文件内容时,不会全部加载进来,会忽视其全局变量。
你把require_once("c.php");放到test()函数之外就可以了。
将require_once("c.php");放到test()函数内部。就不可以了。
能否说下是什么原因吗?
这两者之间有什么区别的?
是跟php文件解释器有关吗?
去掉b.php文件中global $cccccc;这一行,require_once("c.php");放到test()函数内部。可以正常显示。
个人理解:
非在函数内部require/include相当于将b文件全部包含进来了,相当于b文件内容都是a的了。而在a文件函数内部要使用外部的变量,只能用globa方式引用外部变量。
而在php文件中,在函数内部直接使用require/include,则无需使用global了。函数内部已经包含了C文件全部内容。
去掉b.php文件中global $cccccc;这一行,require_once("c.php");放到test()函数内部。可以正常显示。
个人理解:
非在函数内部require/include相当于将b文件全部包含进来了,相当于b文件内容都是a的了。而在a文件函数内部要使用外部的变量,只能用globa方式引用外部变量。
而在php文件中,在函数内部直接使用require/include,则无需使用global了。函数内部已经包