Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从命名空间调用php函数_Php_Namespaces_Global Namespace - Fatal编程技术网

从命名空间调用php函数

从命名空间调用php函数,php,namespaces,global-namespace,Php,Namespaces,Global Namespace,从名称空间调用某些php函数时,我似乎发现了一个我无法理解的错误: <?php namespace test; $var = "foo/bar"; echo 'let\'s call \strpos($var, \'o\'):', \strpos($var, 'o'); try{ echo '<br />let\'s call \unset($var):'; \unset($var); //error! unset($var); //correct! echo '&

从名称空间调用某些php函数时,我似乎发现了一个我无法理解的错误:

<?php
namespace test;
$var = "foo/bar";
echo 'let\'s call \strpos($var, \'o\'):', \strpos($var, 'o');
try{
 echo '<br />let\'s call \unset($var):';
 \unset($var);  //error!
 unset($var);  //correct!
 echo '<br />let\'s call \isset($var):';
 \isset($var);  //error!
 isset($var);  //correct!
}catch(\Exception $e){
 echo 'We have error:', $e->getMessage();
}
?>

Php说:
解析错误:语法错误,意外的T_UNSET,在第7行的global_namespace.Php中需要T_字符串
即使是
try…catch
也不起作用,并且仅针对全局函数
isset()
unset()
报告错误


至少我喜欢它很奇怪

isset
unset
不是函数,它们是语言结构。这意味着它们比函数更接近于像
+
=
这样的操作符,因此不遵循相同的规则。只有一个
未设置
,如果需要,无法将其重新定义为函数


此外,错误也不是例外。您不能捕获错误,因为它不是抛出的。语法/语法分析器错误更是如此,这些错误甚至在执行任何代码之前就发生了。

这是因为名称空间不用于函数,而是用于类。:)@见BZZZZT。错。Try/Catch不起作用,因为@Seer所说的。和:@Seer“虽然任何有效的PHP代码都可以包含在一个名称空间中,但只有四种类型的代码受名称空间的影响:类、接口、函数和常量。”好吧,你每天都会学到一些新东西,感谢deceze的回答:你仍然会发现,PHP团队是如何实现这些你称之为“构造”的,这非常奇怪!(另外,我刚刚访问了您的Kunstube Router项目,我发现这是一个非常有趣的项目,因为我正试图为我正在开发的Front Controller模式的项目做同样的事情。在您的网站上建立联系,以便人们可以联系!)语言构造是语言本身的一部分,而不是预定义的功能。想想看,常规函数不能
取消设置变量。对于常规函数来说,根本没有这样做的机制
unset
由PHP定义为保留关键字,由PHP解释器自己处理。如果您想了解实现细节,请查看PHP源代码。(在不同的地方可以找到各种联系方式。)