PHP中全局函数的作用域是什么?
我有3个文件,声明了一个名称空间(最简单的示例):PHP中全局函数的作用域是什么?,php,Php,我有3个文件,声明了一个名称空间(最简单的示例): 不知怎的,我在foreach中得到了一个无效的参数异常 我想知道全球宣言的范围是什么——有什么想法吗 编辑:如何更方便地访问函数get()中的变量?在Reader::get方法中使用global$base,允许方法本身使用$base变量(在f1.php中声明),否则,代码将在foreach中生成一个未定义的变量通知和一个无效参数警告,并将变量推入要访问的$GLOBALS数组中。确保没有名字冲突。强制转换到对象会覆盖以前的内容,所以请确保优化
不知怎的,我在foreach中得到了一个无效的参数异常
我想知道全球宣言的范围是什么——有什么想法吗
编辑:如何更方便地访问函数
get()
中的变量?在Reader::get
方法中使用global$base
,允许方法本身使用$base
变量(在f1.php中声明),否则,代码将在foreach中生成一个未定义的变量通知和一个无效参数警告,并将变量推入要访问的$GLOBALS
数组中。确保没有名字冲突。强制转换到对象会覆盖以前的内容,所以请确保优化此部分。我在这两个地方都使用了\uuuuuu名称空间\uuuuu
,因为访问类位于同一个位置
<?php //f1.php
namespace Sheet;
$base = [1,2,3];
// globalise objectified var!
$GLOBALS['NSvars'] = [__NAMESPACE__ => (object)['base' => $base]];
?>
<?php // f2.php
namespace Sheet;
require_once('f1.php');
var_dump($base); // ----> array(1,2,3)
class Reader {
public static function get($pos) {
GLOBAL $NSvars;
$base = $NSvars[__NAMESPACE__]->base; // use the global
var_dump($base); // ----> array(1,2,3)
foreach ($base as $idx => $val) {
if ($pos == ($idx +1)) return $base[$idx];
}
return null;
}
}
?>
<?php //test.php
namespace Test;
require_once('f2.php');
print \Sheet\Reader::get(1); // expected: '2'
?>
更面向对象的方法:
<?php //f1.php
namespace Sheet;
abstract class Defs {
public static $base = [1,2,3];
}
?>
<?php // f2.php
namespace Sheet;
require_once('f1.php');
class Reader {
public static function get($pos) {
foreach (Defs::$base as $idx => $val) {
if ($pos == ($idx +1)) return Defs::$base[$idx];
}
return null;
}
}
?>
<?php //test.php
namespace Test;
require_once('f2.php');
print \Sheet\Reader::get(1); // expected: '2'
?>
@PedroLobito谁会想到它这么合乎逻辑呢?:)更好的表述:如何从同一名称空间中的函数中访问带名称空间的$base
变量?应将其作为get方法print\Sheet\Reader::get(1,\Sheet\$base)的参数传递代码>似乎不起作用。。我如何在另一个名称空间中访问它?
<?php //f1.php
namespace Sheet;
abstract class Defs {
public static $base = [1,2,3];
}
?>
<?php // f2.php
namespace Sheet;
require_once('f1.php');
class Reader {
public static function get($pos) {
foreach (Defs::$base as $idx => $val) {
if ($pos == ($idx +1)) return Defs::$base[$idx];
}
return null;
}
}
?>
<?php //test.php
namespace Test;
require_once('f2.php');
print \Sheet\Reader::get(1); // expected: '2'
?>