php 函数执行相互影响

hphper 发布于 2014/06/24 12:40
阅读 347
收藏 0
PHP

【开源中国 APP 全新上线】“动弹” 回归、集成大模型对话、畅读技术报告”

同目录下,有conf.php,T.php

conf.php

<?php
$conf=array(
	'name'=>'hk',
	'age'=>'22'

);



T.php

<?php
function getConf($key){
	static $conf='';
	if(empty($conf)){
		require_once 'conf.php';
	}
	return $conf[$key];
}


function getConf1($key){
	require_once 'conf.php';
	return $conf[$key];
}
echo getConf1('name');
echo getConf('name');



首先执行getConf1()
在getConf1函数作用域内(域1)引入了 conf.php
但在调用getConf时 在getConf作用域(域2) 里 它判断 conf.php已经引入过
所就不在引入了
导致执行getConf是,$conf一直为空
难道所有函数的作用域是连在一起的,还是?


加载中
0
飞晏
飞晏

static静态变量,只读,所以在getConf()函数里面include进去的是不会覆盖getConf()的。

2楼的兄弟,require_once 不是只能被引入一次

酒逍遥
酒逍遥
嗯 我表达错误. 应该是使用require_once 时, 会检测被引入文件是否已被引入过.如果是则不在引入.否则才引入文件.
0
hphper
hphper

引用来自“酒逍遥”的评论

因为 你用了 require_once 文件就只能被引入一次..

改用 require 就可以了.

为什么函数之间的会受影响

a();
require 'conf.php';
print_r($conf);

function a(){
	require_once 'conf.php';
	print_r($conf);
}



上面的在执行a()后,全局再引入 怎么不受影响呢
酒逍遥
酒逍遥
晕...你全局引用用的 是 require 啊.. 你把全局引用 也改成 require_once试试
0
酒逍遥
酒逍遥

因为 你用了 require_once 文件就只能被引入一次..

改用 require 就可以了.

酒逍遥
酒逍遥
经过四楼的兄弟提醒: require_once 会检测文件是否已被引入过。如果是则不再引入该文件.
0
gat205
gat205
_once 可以用于在脚本执行期间同一个文件有可能被包含超过一次的情况下,想确保它只被包含一次以避免函数重定义,变量重新赋值等问题。
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部